补充说明
学习之初将**接口适配器**当成了适配器模式实现的一种,实际上只能算作适配器模式应用的一种,不应和对象适配器、类适配器这两种实现方式当成一个维度。温故而知新!**适配转换器**,新老版本兼容是适配器模式非常擅长的一个领域,但是如果版本过多,要求版本间相互适应。无疑会增加适配的成本。如果要兼容的版本是数据格式上的不一致,可以设计适配器对相应的数据进行转化,待到老版本没有用户时,可以将适配器进行一个退出历史舞台操作。
使用场景
- 系统需要使用现有的类,而此类的接口不符合系统的需要。
- 读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
-
优缺点
优点
-
缺点:
过多的使用适配器模式,会让整个系统变的凌乱。比如明明调用的A方法,结果执行的却是B方法。多了就是一种灾难。因此如果不是很有必要,可以不用适配器类而是对系统进行重构。
设计原理
核心思想
实现步骤
-
个人理解
类图
主要角色
适配器类Adapter:适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
- 适配者类Adaptee:即被适配的角色,它有一个已经存在的具体实现,这个实现与目标不兼容需要适配,适配者类一般是一个不可修改的具体类。
具体实现
对象适配器
对象适配器前提 需要适配的方法必须是virtual虚方法public class ObjAdaptee : MainTypeC{private readonly Usb usb = new Usb();public override void TypeCIn(){usb.UsbIn();}}
类适配器
对象适配器前提 需要适配的对象必须是接口。因为C#不支持多继承public class ClassAdaptee : Usb, IMainTypeC{public void TypeCIn(){this.UsbIn();}}
参考文档
https://www.cnblogs.com/zhaoshujie/p/9742387.html
https://www.cnblogs.com/mingmingcome/p/9810731.html
