适配器模式 通常在已有程序中使用,至少有两个类的接口不兼容时,让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用,现在要新增第三方接口Adaptee。如何进行适配,面向客户端提供 调用Target接口方式达到使用Adaptee目的。简单理解:
客户端(Main函数)要调用Target 使用 Adaptee 功能。
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种。
类适配器 :新建一个适配器叫Adapter, Adapter 继承 Adaptee ,并实现Target接口完成适配
对象适配器 :新建一个适配器叫Adapter, Adapter 里面含有 Adaptee 属性(构造器委托),并实现Target接口完成适配
设计模式,一定要敲代码理解
Target (调用目标接口)
java
/**
适配器------ Target 是调用目标, 是其他对象 的"榜样",
都要向其看齐
*/
public interface Target {
void targetUse1();
void targetUse2();
}
Adaptee (需适配接口)
java
/**
* @author ggbond
* @date 2024年04月04日 10:25
* 第三方接口,后面需 通过 Adapter 适配,使得Target兼容
*/
public class Adaptee {
public void method1() {
System.out.println("Adaptee:方法1");
}
public void method2() {
System.out.println("Adaptee:方法2");
}
}
继承适配
java
/**
* @author ggbond
* @date 2024年04月04日 10:29
* 类适配器 ,采用继承方式
*/
public class Adapter01 extends Adaptee implements Target {
@Override
public void targetUse1() {
System.out.println("适配 Adaptee 的方法1.");
method1();
}
@Override
public void targetUse2() {
System.out.println("适配 Adaptee 的方法2.");
method2();
}
}
委托适配
java
/**
* @author ggbond
* @date 2024年04月04日 10:29
* 对象适配器,采用继承方式
*/
public class Adapter02 implements Target {
private Adaptee adaptee;
public Adapter02(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void targetUse1() {
System.out.println("适配 Adaptee 的方法1.");
adaptee.method1();
}
@Override
public void targetUse2() {
System.out.println("适配 Adaptee 的方法2.");
adaptee.method2();
}
}
调用测试
java
/**
* @author ggbond
* @date 2024年04月04日 10:43
* 调用Target接口,使用Adaptee接口
*/
public class Main {
public static void main(String[] args) {
Target target01 = new Adapter01();
target01.targetUse1();
target01.targetUse2();
System.out.println("-----------");
Target target02 = new Adapter02(new Adaptee());
target02.targetUse1();
target02.targetUse2();
}
}
结果
java
适配 Adaptee 的方法1.
Adaptee:方法1
适配 Adaptee 的方法2.
Adaptee:方法2
-----------
适配 Adaptee 的方法1.
Adaptee:方法1
适配 Adaptee 的方法2.
Adaptee:方法2
总结
可以将两个互不相干的类关联在一起,目的为了兼容通用。但是类适配器对于 Java等语言继承受限。满足单一职责原则与开闭原则,当然代码整体复杂度增加。