适配器模式(包装器: 接口转换):将类的接口转换成别的规格,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
核心:接口规格转换,对于线上系统,已有稳定运行的源角色和目标角色,在不改动源角色和目标角色代码的前提下,将源角色对象用于目标角色的接口
角色:
- 适配器(Adapter):处理转换逻辑,需实现目标角色的接口(即:对于客户端,适配器行使目标角色功能)
- 源角色(Adaptee):被转换的角色,数据来源方
- 目标角色(Target):目标角色,数据接收方(应该以接口方式出现)
PS:架构设计中,尽量遵循依赖倒置原则,否则将影响到系统的扩展性和维护性
类适配器(继承关系)
类适配器:①继承源角色,②实现目标接口
// 适配器类 - 完成数据转换,在客户端被当作Target行使功能
public class Adapter extends Adaptee implements Target{
@Override
public int request() {
return super.specificRequest() / 2;
}
}
public class Test {
public static void main(String[] args) {
Target target = new Adapter();
System.out.println(target.request());
}
}
对象适配器(组合关系)
对象适配器:通过关联委托关系与源角色通信,②实现目标接口
// 维护源角色的引用(关联委托关系 - 组合)
public class Adapter implements Target {
private Adaptee adaptee = null;
public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
@Override
public int request() {
return adaptee.specificRequest() / 2;
}
}
public class Test {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
System.out.println(target.request());
}
}
// 源角色
public class Adaptee {
public int specificRequest(){
return 220;
}
}
//目标角色接口
public interface Target {
int request();
}