应用场景
试想,你已经有了一个类A,它具有一些功能。但是现在你需要另一些功能,这些功能可以复用A来实现,那么非常自然地应该想到让新的类来持有A的引用,实现组合结构,转发请求来实现新的功能。
类图
实例代码
Target:
你希望有一个完全符合Target接口的类来达到你的功能:
public interface Target {
void Request();
}
Adapter,适配器,完成一个连接旧有类与目标接口的功能:
public class Adapter implements Target {
Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void Request() {
adaptee.specificRequest1();
adaptee.specificRequest2();
}
}
旧有类Adaptee:
public class Adaptee {
void specificRequest1(){
System.out.println("specificRequest1 called");
}
void specificRequest2(){
System.out.println("specificRequest2 called");
}
}
Client:
public class Client {
public static void main(String[] args){
Target target=new Adapter(new Adaptee());
target.Request();
}
}
最终实现,调用Target对象的特定功能,复用了现有类。
扩展
说白了就是一个复用已有类而已,上面是通过组合复用。也可以通过继承复用。即Adapter实现Target接口,又继承自Adaptee类,所以实现复用。