1、定义
适配器模式把一个类的接口装换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个雷能够在一起工作。
2、使用场景
- 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
- 如果想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作。
- 需要一个统一的输出接口,而输入端的类型不可预知。
3、UML图
4、代码示例
public interface Target {
//客户端期待的接口
public void request();
}
public class Adaptee {
//现有类已经实现的接口
public void specificRequest() {
}
}
//适配器
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
//转调被适配者的的方法
this.adaptee.specificRequest();
}
}
5、对象适配器和类适配器
上述的实现方式称为对象适配器,在适配器里持有了被适配者的一个实例,通过该实例来调用被适配者的方法。
还有一种实现方式是继承 Adptee 的方式,示例如下:
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
specificRequest();
}
}
这种通过继承 Adaptee 并实现 Target 接口的方式称为类适配器。
对象适配器使用组合的方式实现接口的兼容效果,比类适配器要更为灵活,另一个好处是被适配对象中的方法不会暴露出来,而类适配器继承了被适配者,被适配者的方法在Adapter里也有,就使得 Adapter 里出现了一些奇怪的接口,用户使用成本较高。所以,对象适配器更加灵活、实用。