1.适配器模式
适配器模式把一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式有两种形式:类的适配器模式和对象的适配器模式
2.类的适配器模式
(1)静态结构图
客户端期待的接口是operation2,而现有类Adaptee没有,所以需要一个Adapter,使用Adaptee的操作operation1实现operation2。
角色:
目标Target:客户端所期待的接口
源被适配者Adaptee:已经实现了功能的对象,但是和客户接口不兼容
适配器Adapter:适配器模式的核心,把源的接口转化为Target的接口
(2)示例源码:
Target.java
public interface Target {
/**
* Adaptee有的接口
*/
public void operation1();
/**
* Adaptee 没有的接口,而客户端需要这种接口.
*/
void sampleOperation2();
}
Adaptee.java
public class Adaptee {
public void operation1(){
}
}
Adapter
public class Adapter extends Adaptee implements Target {
/**
* Adaptee 没有的接口,而客户端需要这种接口.
*/
public void operation2(){
// 一般会在此方法调用Adaptee的一些方法
operation1();
}
}
3.对象的适配器模式
(1)静态结构图
与类的适配器模式结构图的区别就是Adapter和Adaptee之间关闭由继承变成了委托。
(2)示例源码
Target和Adaptee的源码和类的适配器模式一样。
Adapter.java
public class Adapter implements Target {
public Adapter(Adaptee adaptee){
super();
this.adaptee = adaptee;
}
public void operation1(){
adaptee.operation1();
}
public void operation2(){
// Write your code here
}
private Adaptee adaptee;
}
4.适配器的使用环境
(1)系统需要使用现有的类,但是此类的接口不符合系统的需求
(2)需要建立一个可以重复使用的类,用于彼此之间没有太大关联的一些类,包括一些将来使用的类。用这个类来适配这些类。
(3)如果需要适配的是有很多子类的情况,用对象适配器模式比较好。