【设计模式】结构型模式之对象适配器模式

对象适配器模式

概述

上篇讲解了类适配器模式,类适配器模式类违背了合成复用原则,类适配器是客户类有一个接口规范的情况下可用,反之不可用。这篇我们来讲一下对象适配器模式。

UML图

依旧使用上一讲中电脑读取SD卡和TF卡的例子
类图如下:

Computer
+readSD(SDCard sdCard) : String
«interface»
SDCard
+readSD() : String
+writeSD() : void
SDCardImpl
+readSD() : String
+writeSD() : void
«interface»
TFCard
+readTF() : String
+writeTF() : void
TFCardImpl
+readTF() : String
+writeTF() : void
SDAdapterTF
-tfCard:TFCard
+SDAdapterTF(TFCard tfCard)
+readSD() : String
+writeSD() : void
Client
+main() : void

由上图可以看出,和类适配器模式唯一不同的是,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
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值