适配器设计模式

设计模式 (Design pattern) 是一套被反复使用, 多数人知晓的, 经过分类编目的代码设计经验的总结. 使用设计模式是为了可重用代码, 让代码更容易被他人理解解, 保证代码可靠性, 程序的重用性.

简单理解: 设计模式就是各种套路.

适配器设计模式: 解决接口与接口实现类之间的矛盾问题.

如果一个接口有很多个方法, 但是某一个实现只需要使用到其中的某一个方法, 那么根据接口的语法, 这个实现必须重写这个接口的所有方法. 这将导致代码维护和阅读很麻烦. 于是就有了适配器这个设计模式.

适配器是一个类, 实现这个接口, 重写全部方法, 但是所有方法都是空实现, 即全部重写了, 但是全部都是空着的, 没有方法体 方法体都是空的.

再定义实现的时候, 就不要去实现这个接口了, 而是继承这个适配器, 然后在类中, 要用到哪个方法就重写那一个方法就可以了.

适配器的所有方法都是空实现, 因此建立适配器的对象是没有任何意义的, 因此将适配器定义为抽象的, 即用 abstract 来修饰, 目的就是不让外界来创建它的对象.

接口:

public interface Inter {
    public abstract void method1();

    public abstract void method2();

    public abstract void method3();

    public abstract void method4();

    public abstract void method5();

    public abstract void method6();

    public abstract void method7();

    public abstract void method8();

    public abstract void method9();

    public abstract void method10();
}

适配器:

public abstract class InterAdapter implements Inter {  // 定义为抽象类, 不让外界实例化这个类
    @Override
    public void method1() {
    }

    @Override
    public void method2() {
    }

    @Override
    public void method3() {
    }

    @Override
    public void method4() {
    }

    @Override
    public void method5() {
    }

    @Override
    public void method6() {
    }

    @Override
    public void method7() {
    }

    @Override
    public void method8() {
    }

    @Override
    public void method9() {
    }

    @Override
    public void method10() {
    }
}

Javabean 类:

public class InterImpl extends InterAdapter {
    @Override
    public void method5() {
        System.out.println("重写了适配器的 method5.");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        InterImpl imp = new InterImpl();
        imp.method5();
    }
}

执行结果:

重写了适配器的 method5.

总结:

  1. 当一个接口中抽象方法过多, 但是我只要使用其中一部分的时候, 就可以适配器设计模式.

  2. 书写步骤:

    1. 编写中间类 XXXAdapter, 实现对应的接口.

    2. 对接口中的抽象方法进行空实现.

    3. 让真正的实现类继承中间类, 并重写需要用的方法.

    4. 为了避免其他类创建适配器类的对象, 中间的适配器类用 abstract 进行修饰.

  3. 如果这个真正的实现类, 即继承中间类 (即适配器) 的这个最终的实现类还有别的父类, 而 Java 不允许多继承, 怎么办呢? 可以让这个中间类, 即适配器去继承这个父类.

posted @ 2024-09-11 21:59  有空  阅读(35)  评论(0)    收藏  举报