适配器模式(Adapter Pattern)
2018-12-23 本文已影响0人
群众里面有坏人呐
定义
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(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...