概念:
将一个接口转换成客户希望的另一种接口,适配器模式使得接口不兼容的那些类可以一起工作,别名为包装器(Wrapper)。从而使得原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
实现这个目的有两个方法,继承or组合
1,使用继承(类适配器模式)
2,使用组合(对象适配器模式)
角色:
Target 请求接口
Adapter装饰器类
Adaptee 被适配类(已经存在的类)
//使用继承,类适配器模式
public interface Target {
void request();
}
public class Adaptee {
public void adapteeRequest(){
System.out.println("adapteeRequest");
}
}
public class Adapter extends Adaptee implements Target {
@Override
public void request(){
adapteeRequest();
}
}
public class Client {
public static void main(String[] args) {
Target t = new Adapter();
t.request();
}
}
//使用组合(对象适配器模式)
public interface Target {
void request();
}
public class Adaptee {
public void adapteeRequest(){
System.out.println("adapteeRequest");
}
}
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request(){
adaptee.adapteeRequest();
}
}
public class Client {
public static void main(String[] args) {
Target t = new Adapter(new Adaptee());
t.request();
}
}
优点:
解耦
增加已有类的透明性和复用性
灵活性扩展性好
缺点:
一次最多只能适配一个适配者类,不能将一个适配者类和他的子类同时适配到目标接口