• 7. Adapter适配器(结构型模式)


    7. Adapter适配器(结构型模式)

    李建忠
    上海祝成科技 高级培训讲师
    适配(转换)的概念无处不在……

        适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。

    动机(Motivation

        在软件系统中, 由于应用环境的变化, 常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。

        如何应对这种迁移的变化?如何既能利用现有对象的良好实现, 同时又能满足新的应用环境所要求的接口?

    意图(Intent

        将一个类的接口转换成客户希望的另一个接口Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    ——《设计模式》GoF

    例说Adapter应用Codes in VS.NET

    结构(Structure——对象适配器


        Adapter和Adaptee为组合关系,Adaptee为Adapter的一个组成部分;Target为用户期望的接口;

    结构(Structure——类适配器

    Adapter模式的几个要点
    • Adapter模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况在遗留代码复用、类库迁移等方面非常有用
    • GoF 23定义了两种Adapter模式的实现结构: 对象适配器类适配器。但类适配器采用多继承的实现方式, 带来了不良的高耦合,所以一般不推荐使用。对象适配器采用
    对象组合的方式, 更符合松耦合精神。
    • Adapter模式可以实现的非常灵活,不必拘泥于Gof23中定义的两种结构。 例如, 完全可以将Adapter模式中的现存对象作为新的接口方法参数, 来达到适配的目的。
    • Adapter模式本身要求我们尽可能地使用面向接口的编程风格,这样才能在后期很方便地适配。
    .NET框架中的Adapter应用
    .NET中复用COM对象:
    – COM对象不符合.NET对象的接口
    使用tlbimp.exe来创建一个Runtime Callable Wrapper(RCW)以使其符合.NET对象的接口。

    • .NET数据访问类(Adapter变体):

    各种数据库并没有提供DataSet接口
    使用DbDataAdapter可以将任何各数据库访问/存取适配到一个DataSet对象上

    集合类中对现有对象的排序(Adapter变体):

    现有对象未实现IComparable接口
    实现一个排序适配器(继承IComparer接口), 然后在其Compare方法中对两个对象进行比较。

    推荐资源
    设计模式论坛http://forum.sucent.Com
    《设计模式:可复用面向对象软件的基础》GoF
    《面向对象分析与设计》Grady Booch
    《敏捷软件开发: 原则、 模式与实践》Robert C. Martin
    《重构: 改善既有代码的设计》Martin Fowler
    Refactoringto PatternsJoshua Kerievsky

  • 相关阅读:
    语义分割之BiSeNet
    语义分割之ENet, LinkNet
    语义分割之DFN
    语义分割之GCN
    语义分割之DeepLab系列
    语义分割之SegNet
    语义分割之U-Net和FusionNet
    语义分割之FCN
    pytorch,python学习
    CV baseline之SENet
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/1529729.html
Copyright © 2020-2023  润新知