设计模式——适配器模式(7)

一、写在前面

  • 代理模式
  • 适配器模式
  • 装饰者模式
  • 桥接模式
  • 外观模式
  • 组合模式
  • 享元模式

二、介绍

  • 如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。
  • 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
    适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。所以在这里,我们直接介绍对象适配器模式

三、对象适配器模式

  • 如果我们希望让A适配到B上,那么需要一个转换类C,C中聚合A的对象,并实现B的接口。C中实现的是A的方法。
  • 在client端,我们把C当成B的一个是实现类,并在构造C的时候,将A的实现类传入。
java 复制代码
//SD卡的接口
public interface SDCard {
	//读取SD卡方法
	String readSD();
	//写入SD卡功能
	void writeSD(String msg);
}
//SD卡实现类
public class SDCardImpl implements SDCard {
	public String readSD() {
		String msg = "sd card read a msg :hello word SD";
		return msg;
	}
	public void writeSD(String msg) {
		System.out.println("sd card write msg : " + msg);
	}
}
public class TFCardImpl implements TFCard {
	public String readTF() {
		String msg ="tf card read msg : hello word tf card";
		return msg;
	}
	public void writeTF(String msg) {
		System.out.println("tf card write a msg : " + msg);
	}
}
public class SDAdapterTF implements SDCard {
	private TFCard tfCard;
	public SDAdapterTF(TFCard tfCard) {
		this.tfCard = tfCard;
	}
	public String readSD() {
		System.out.println("adapter read tf card ");
		return tfCard.readTF();
	}
	public void writeSD(String msg) {
		System.out.println("adapter write tf card");
		tfCard.writeTF(msg);
	}
}
public class Client {
	public static void main(String[] args) {
		Computer computer = new Computer();
		SDCard sdCard = new SDCardImpl();
		System.out.println(computer.readSD(sdCard));
		System.out.println("------------");
		TFCard tfCard = new TFCardImpl();
		SDAdapterTF adapter = new SDAdapterTF(tfCard);
		System.out.println(computer.readSD(adapter));
	}
}
  • 适配器模式的使用场景为:
    • 以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
    • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
相关推荐
咖啡八杯1 天前
GoF设计模式——中介者模式
java·后端·spring·设计模式
胡萝卜术2 天前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
亦暖筑序2 天前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
青禾网络5 天前
Web 前端如何接入 AI 音效生成:从零到可用的完整方案
人工智能·设计模式
ZJPRENO6 天前
吃透软件开发六大设计原则,告别烂代码
设计模式
咖啡八杯6 天前
GoF设计模式——命令模式
java·设计模式·架构
花椒技术6 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播
艺艺生辉7 天前
迭代器模式-"我也想被增强for循环"
设计模式
咖啡八杯8 天前
GoF设计模式——策略模式
java·后端·spring·设计模式