概述
上篇讲解了类适配器模式,类适配器模式类违背了合成复用原则,类适配器是客户类有一个接口规范的情况下可用,反之不可用。这篇我们来讲一下对象适配器模式。
UML图
依旧使用上一讲中电脑读取SD卡和TF卡的例子
类图如下:
由上图可以看出,和类适配器模式唯一不同的是,SDAdapterTF类由原来的继承TFCardImpl类改为了聚合TFCard。
代码实现
- 根据类图,只需要在类适配器模式的基础上修改SDAdapterTF类的代码即可,以下为修改后的SDAdapterTF。
package object_adapter;
//SDAdapterTF不再继承TFCardImpl
public class SDAdapterTF implements SDCard{
//聚合TFCard
TFCard tfCard;
public SDAdapterTF(TFCard tfCard) {
this.tfCard = tfCard;
}
@Override
public String readSD() {
System.out.println("adapter read tf card");
return tfCard.readTF();
}
@Override
public void writeSD(String msg) {
System.out.println("adapter write tf card");
tfCard.writeTF(msg);
}
}
- 运行结果
package object_adapter;
public class Client {
public static void main(String[] args) {
//创建计算机对象
Computer computer = new Computer();
String msg = computer.readSD(new SDAdapterTF(new TFCardImpl()));
System.out.println(msg);
}
}
/*
控制台输出:
adapter read tf card
readTF() -> hello
*/