适配器模式将一个类转换成客户希望的另外一个接口,它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
在Java中只支持单继承,故Java中实现Adapter模式时常用对象组合来实现,而在C++中可以使用多重继承来实现。
public interface Adaptee {
public void specificRequest();
}
public class ConcreteAdaptee implements Adaptee{
@Override
public void specificRequest() {
System.out.println("Do sth in Adaptee!");
}
}
public interface Target {
public void request();
}
public class Adapter implements Target {
private Adaptee adaptee = null;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
public class Client {
@Test
public void test(){
Adaptee adaptee = new ConcreteAdaptee();
//使用adaptee创建adapter类型变量
INeedAAdapter(new Adapter(adaptee));
}
//测试方法
public void INeedAAdapter(Target target){
target.request();
}
}
这里使用Adapter将Adaptee转化为Target接口类型,并将代理了Adaptee接口的方法。这里的Client的INeedAAdapter需要一个Target接口的变量,但是我们希望调用的却是Adaptee类型的变量的方法,故将Adaptee使用Adapter转化为Target接口类型的变量。
Adapter模式一般常用语多个系统相互结合时,或代码重构时,在多个模块中可能刚开始并没有设计好统一接口,导致接口不兼容现象,使用Adapter模式调整接口定义可以在不改变原有的类的基础上将多个不兼容接口统一为同一个接口,从而方便统一处理。