适配器模式(Adapter Pattern)

定义

将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
把一个类的接口变成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。

为什么要用适配器模式

  • 可以让任何两个没有关联的类一起运行
  • 提高了类的复用,想使用现有的类,而此类的接口标准又不符合现有系统的需要。通过适配器模式就可以让这些功能得到更好的复用。
  • 增加了类的透明度,客户端只关注结果
  • 使用适配器的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

实例

现在安卓主要有两种数据线:Type-C和Micro USB,很多手机都配置了Type-C转接头(适配器),用Type-C的手机有了转接头(适配器)也能用Micro USB充电

类适配器

定义Micro USB类

public class MicroDataLine {
    public void connect(){
        System.out.println("connect with micro data line...");
    }
}

定义DataLine接口

public interface DataLine {
    public void connect();
}

定义TypeCDataLine实现DataLine

public class TypeCDataLine implements DataLine{
    @Override
    public void connect() {
        System.out.println("connect with Type-C data line...");
    }
}

定义适配器继承原有类实现数据线接口

public class TypeCAdaptor extends MicroDataLine implements DataLine {
    @Override
    public void connect() {
        System.out.println("use Type-C adaptor");
        super.connect();
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        DataLine dataLine = new TypeCDataLine();
        dataLine.connect();
        DataLine adaptor = new TypeCAdaptor();
        adaptor.connect();
    }
}

输出

connect with Type-C data line...
use Type-C adaptor
connect with micro data line...

对象适配器

创建适配器类,实现标准接口,将这个调用委托给实现新接口的对象来处理

public class TypeCAdaptor implements DataLine {
    DataLine dataLine = new TypeCDataLine();
    public TypeCAdaptor(DataLine dataLine) {
        this.dataLine = dataLine;
    }
    @Override
    public void connect() {
        System.out.println("use Type-C adaptor...");
        dataLine.connect();
    }
}

测试

public class Test {
    public static void main(String[] args) {
        TypeCAdaptor adaptor = new TypeCAdaptor(new TypeCDataLine());
        adaptor.connect();
    }
}

输出

use Type-C adaptor...
connect with Type-C data line...

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