适配器模式 Adapter
只说对象适配器,类适配器需要多重继承
将一个接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
时控制范围之外的一个原油对象与某个接口匹配,来复用一些现存的类,但接口又与复用环境要求不一致的情况
Target:客户所期望的接口,可以抽象也可以是具体类
Adaper:包装需要适配的对象把原接口转换为目标接口,实现Target,持有Adaptee的引用
Adaptee:需要被适配的类
Target不知道Adaptee这个类,但却能使用它
主要解决两个已有接口之间不匹配的问题,不需要考虑这些接口是怎样实现的,也不考虑它们各自可能会如何演化。我的这种方式不需要对两个独立设计的类中任一个进行重新设计,就能够使它们协同工作。
与代理模式
代理与适配器,其实都是属于一种衔接
代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉。
适配器则不需要虚构出一个代表者,只需要为应付特定使用目的,将原来的类进行一些组合。
使用场景
两个类所做的事情相同或相似,系统的数据和行为都正确,但是具有不同的接口时要使用它,使得客户端只需要同一调用同一接口。
实例
Target
public interface Target {
void request();
}
Adapter
public class Adapter implements Target{
private Adaptee adaptee = new Adaptee();
@Override
public void request() {
adaptee.specificRequest();
}
}
Adaptee
public class Adaptee {
public void specificRequest(){
System.out.println("特殊请求");
}
}
测试:
public class Test {
public static void main(String[] args) {
Target t = new Adapter();
t.request();
}
}
输出:特殊请求,表面没有使用特殊请求方法,但却输出的特殊请求方法。