定义:将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作;
类型:结构型;
适用场景:
- 已经存在的类,他的方法和需求不匹配时(方法结果相同或类似);
- 不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品不同厂家造成功能类似而接口不相同情况下的解决方案;
优点:
- 能提高类的透明性和复用,现有的类复用但是不需要改变;
- 目标类和适配器类解耦,提高程序扩展性;
- 符合开闭原则;
缺点:
- 适配器编写过程需要全面考虑,可能会增加系统的复杂性;
- 增加系统代码可读的难度;
基础信息
// 被适配者
public class Adaptee {
public void adapteeRequest(){
System.out.println("被适配者的方法");
}
}
// 目标接口
public interface Target {
void request();
}
// 目标具体实现
public class ConcreteTarget implements Target {
public void request() {
System.out.println("ConcreteTarget目标方法");
}
}
1、类适配器
// 适配器
public class Adapter extends Adaptee implements Target {
public void request() {
super.adapteeRequest();
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Target target = new ConcreteTarget();
target.request();
Target adapter = new Adapter();
adapter.request();
}
}
// 输出结果:
ConcreteTarget目标方法
被适配者的方法
2、对象适配器
// 适配器
public class Adapter implements Target {
private Adaptee adaptee = new Adaptee();
public void request() {
adaptee.request();
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Target target = new ConcreteTarget();
target.request();
Target adapter = new Adapter();
adapter.request();
}
}
// 输出结果:
ConcreteTarget目标方法
被适配者的方法
一般均使用对象适配器不使用类适配器