补充说明

学习之初将**接口适配器**当成了适配器模式实现的一种,实际上只能算作适配器模式应用的一种,不应和对象适配器、类适配器这两种实现方式当成一个维度。温故而知新!
**适配转换器**,新老版本兼容是适配器模式非常擅长的一个领域,但是如果版本过多,要求版本间相互适应。无疑会增加适配的成本。如果要兼容的版本是数据格式上的不一致,可以设计适配器对相应的数据进行转化,待到老版本没有用户时,可以将适配器进行一个退出历史舞台操作。

使用场景

  • 系统需要使用现有的类,而此类的接口不符合系统的需要。
    • 读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
  • 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
  • 通过接口转换,将一个类插入另一个类系中。

    优缺点

    优点

  • 很优雅的复用现有的类,符合开闭原则。

    缺点:

    过多的使用适配器模式,会让整个系统变的凌乱。比如明明调用的A方法,结果执行的却是B方法。多了就是一种灾难。因此如果不是很有必要,可以不用适配器类而是对系统进行重构。

    设计原理

    核心思想

    使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

    实现步骤

  • 通过适配器,来间接调用适配者类已有的方法

    个人理解

    类图

    忽略

    主要角色

  • 适配器类Adapter:适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。

  • 适配者类Adaptee:即被适配的角色,它有一个已经存在的具体实现,这个实现与目标不兼容需要适配,适配者类一般是一个不可修改的具体类。

    具体实现

    对象适配器

    对象适配器前提 需要适配的方法必须是virtual虚方法
    1. public class ObjAdaptee : MainTypeC
    2. {
    3. private readonly Usb usb = new Usb();
    4. public override void TypeCIn()
    5. {
    6. usb.UsbIn();
    7. }
    8. }

    类适配器

    对象适配器前提 需要适配的对象必须是接口。因为C#不支持多继承
    1. public class ClassAdaptee : Usb, IMainTypeC
    2. {
    3. public void TypeCIn()
    4. {
    5. this.UsbIn();
    6. }
    7. }

    参考文档

    https://www.cnblogs.com/zhaoshujie/p/9742387.html
    https://www.cnblogs.com/mingmingcome/p/9810731.html