设计模式——适配器模式(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));
	}
}
  • 适配器模式的使用场景为:
    • 以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
    • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
相关推荐
小白不太白9503 小时前
设计模式之建造者模式
java·设计模式·建造者模式
菜菜-plus5 小时前
java 设计模式 模板方法模式
java·设计模式·模板方法模式
萨达大5 小时前
23种设计模式-模板方法(Template Method)设计模式
java·c++·设计模式·软考·模板方法模式·软件设计师·行为型设计模式
机器视觉知识推荐、就业指导6 小时前
C++设计模式:原型模式(Prototype)
c++·设计模式·原型模式
阳光开朗_大男孩儿7 小时前
组合模式和适配器模式的区别
设计模式·组合模式·适配器模式
MinBadGuy7 小时前
【GeekBand】C++设计模式笔记13_Flyweight_享元模式
c++·设计模式
Clang's Blog8 小时前
23种设计模式详解(以Java为例)
java·开发语言·设计模式
程序员奇奥8 小时前
设计模式——简单工厂模型、工厂模式、抽象工厂模式、单例模式、代理模式、模板模式
单例模式·设计模式·抽象工厂模式
hxj..9 小时前
【设计模式】代理模式
java·设计模式·代理模式·动态代理
十五年专注C++开发9 小时前
C++不完整类型(Incomplete Type)的检测与避免
开发语言·c++·算法·设计模式