适配器模式(Adapter)


前言

设计模式系列代码均持续更新在我的gitHub:to github


I. 适配器模式工作原理

  • 将一个类的接口转换成另一种接口,让原本接口不相兼容的类可以兼容(例如生活中的USB转外接屏幕的转接器 - USB 转 HDMI等 )
  • 从用户的角度来看,被适配类是看不见的,是解耦合的
  • 用户调用适配器转换出来的接口方法,由适配器去调用被适配者的相应接口方法


II. 适配器模式分类

  • 类适配器
  • 对象适配器
  • 接口适配器


III. 类适配器模式的类图

类图


IV. 类适配器模式代码

完整代码 github

  • 部分代码
public class Adapter extends Laptop implements TransferLine {

    public Adapter() {
        provideHDMI();
    }

    public String provideHDMI() {
        setPort("HDMI");

        return getPort();
    }
}


V. 对象适配器模式

  • 对象适配器模式相对于类适配器模式就是将继承关系转为组合关系, 更为符合 合成复用原则
public class Adapter implements TransferLine {

    private Laptop laptop;

    public Adapter(Laptop laptop) {
        this.laptop = laptop;
    }

    public String provideHDMI() {
        if (laptop != null) {
            laptop.setPort("HDMI");
        }

        return laptop.getPort();
    }
}


VI. 接口适配器模式

  • 当我们仅需要使用某个接口中的某一个方法时,可以使用接口适配器模式
public interface AdapterInterface {
    void fun1();
    void fun2();
    void fun3();
    void fun4();
}
/* 以默认方式实现接口所有方法 */
public abstract class AbstractAdapter implements AdapterInterface {
    public void fun1() {}
    public void fun2() {}
    public void fun3() {}
    public void fun4() {}
}
/*  不想实现所有接口时,只需实现我们想要的方法就好 */
public class Client {
    public static void main(String[] args) {
        new AbstractAdapter(){
            @Override
            public void fun1() {
                System.out.println("=== 接口适配器 ===");
            }
        };
    }
}

你可能感兴趣的:(适配器模式(Adapter))