Adapter(适配器)–类对象结构型模式

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

二、动机
1.在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。
2.如果应对这种“迁移的变化”?如何能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?

三、适用性
1.你想使用一个已经存在的类,而它的接口不符合你的需求。
2.你想创建一个可以复用的类,该类可以与其他不相关的类或者不可见的类(即那些接口可能不一定兼容的类)协同工作。
3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每个一都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

四、结构
类适配器使用多重继承对一个接口与另一个接口进行匹配,入下图所示。

对象匹配器依赖对象组合,如下图所示。

五、效果
类适配器和对象适配器有不同的权衡。类适配器
1.用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类似及所有它的子类时,类Adaptee将不能胜任工作。
2.使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
3.仅引入了一个对象,并不需要额外的指针以间接得到adaptee。
对象适配器则
1.允许一个Adapter与多个Adpatee——即Adaptee本身以及它的所有子类(如果有子类的话)——同时工作。Adapter也可以一次给所有的Adpatee添加功能。
2.使得重定义Adaptee的行为比较困难。这就是需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

六、实现
1.使用C++实现适配器类
2.可插入的适配器

七、要点总结
1.Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一样的情况”,在遗留代码复用、类库迁移等方面非常有用。
2.类适配器采用“多继承”的实现方式,一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。
3.Adapter模式可以实现的非常灵活,不必拘泥于定义中的两个结构(类模式、对象模式)。

八、相关模式
模式Bridge的结构与对象适配器类似,但是Bridge模式的出发点不同:Birdge目的是将接口部分和实现部分分离,从而对它们可以较为容易也相对独立的加以改变。而Adpater则意味着改变一个已有对象的接口。
Decorator模式增强了其他对象的功能而同时又不改变它的接口。因此decorator对应程序的透明性比适配器要好。结果是decorator支撑递归组合,而纯粹使用适配器是不可能实现这一点的。
模式Proxy在不改变它的接口条件下,为另一个对象定一个了一个代理。

九、举例说明
适配器模式相当于现实中的转接头。就是为适配接口而产生的。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

Adapter(适配器)--类对象结构型模式相关推荐

  1. 设计模式七:Adapter(适配器)——类对象结构型模式

    结构型模式: 结构型模式设计到如何组织类和对象以获得更大的结构. 结构型类模式: 采用继承机制来组合接口或实现.简单的例子是采用多重继承,这一模式尤其有助于多个独立开发的类库协同工作. 结构型对象模式 ...

  2. Decorator(装饰)--对象结构型模式

    Decorator(装饰)–对象结构型模式 一.意图 1.动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 二.动机 1.在某些情况下我们可能会&quo ...

  3. 设计模式十三:proxy(代理)——对象结构型模式

    proxy(代理)--对象结构型模式 1.意图 为其他对象提供一种代理以控制这个对象的访问 2.动机 对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化. 3.适 ...

  4. Proxy(代理)--对象结构型模式

    Proxy(代理)–对象结构型模式 一.意图 为其他对象提供一种代理以控制对这个对象的访问. 二.动机 1.在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或 ...

  5. Facade(外观)--对象结构型模式

    Facade(外观)–对象结构型模式 一.意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 二.动机 1.上述左边方案的问题在于组 ...

  6. Composite(组合)--对象结构型模式

    Composite(组合)–对象结构型模式 一.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 二.动机 ...

  7. Flyweight(享元)--对象结构型模式

    Flyweight(享元)–对象结构型模式 一.意图 运行共享技术有效地支持大量细粒度的对象. 二.动机 1.在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行 ...

  8. Bridge模式——对象结构型模式

    今天看了Bridge模式,对其进行简单的总结,并给出几篇通俗易懂的文章链接. (一)意图--将抽象部分和它的实现部分分离,使它们都可以独立地变化. 适用于从多维度描述的类型,拆解开来,使其能沿着各维度 ...

  9. Proxy 代理模式 对象结构型模式

    1.意图 为其它对象提供一种代理以控制对这个对象的访问. 2.别名 Surrogate 3.动机 对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化.我们考虑一个 ...

最新文章

  1. 使用Python+OpenCV实现图像数据采集
  2. 关于fragment之间的数据传输
  3. RabbitMQ(三)发布确认
  4. 【转】SQL Server中行列转换 Pivot UnPivot
  5. 38--合并两个排序的链表
  6. 当心XML文件中的非法字符
  7. oracle大于或等于,如何用SQL实现最接近某一个值且大于等于这个值的一条记录
  8. 大数据之-Hadoop3.x_MapReduce_编程规范---大数据之hadoop3.x工作笔记0086
  9. 版权所有LIKEWING_柳我借地存个图学习一下
  10. 微服务、容器、DevOps三者之间的关系你清楚吗?
  11. 检测工控设备SNMP漏洞工具:SNMP Fuzzer
  12. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
  13. mysql 多数据源_SpringBoot+多数据源(MySQL)
  14. 通信原理(五) 信道编码
  15. springboot高校学生健康打卡系统的设计与实现毕业设计源码021009
  16. Python简易图片批量压缩程序
  17. X64dbg-插件开发-字符编码-常用插件函数-回调结构
  18. 关于header file、static、inline、variable hides的一点感想
  19. 智能PID软件-AVEVA Diagrams设备符号导入
  20. Linux下嵌入式开发环境配置

热门文章

  1. C#获取本机名及IP地址
  2. 深入 char * ,char ** ,char a[ ] ,char *a[]
  3. Android之Android Studio常用插件
  4. 网页版消消乐快速实现,无代码吗iVX 真那么简单?
  5. 视图添加字段_Odoo开发教程2-为模型添加字段
  6. 全球顶级大学,在中国录取率却不足0.5%,答案一针见血!
  7. 美女,你这是把腰带当裙子了?
  8. 足不出户,游遍七大洲,不可错过的14部地理纪录片!
  9. 老板啥都懂,还天天套路我?!
  10. easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法