文章目录

  • I . 适配器模式概念
  • II . 适配器模式 适用场景
  • III . 适配器模式 优缺点
  • IV . 适配器模式 与 外观模式对比
  • V . 适配器模式 相关角色 ( 重点 )
  • VI . 适配器模式 ( 类适配器 ) 代码实现流程 ( 重点 )
  • VII . 适配器模式 ( 对象适配器 ) 代码实现流程 ( 重点 )

I . 适配器模式概念


适配器模式 :

① 设计模式类型 : 结构型 ;

② 概念 : 将 类的接口 转换成用户可以调用的 另外一个接口 ;

③ 目的 : 使接口不兼容的两个类可以一起工作 ;

④ 概念中的三个角色 : 被适配者 ( 现有的功能类 ) , 用户目标接口 ( 用户调用的接口 ) , 适配器类 ( 用户通过调用该类 , 间接调用 被适配者类 ) ;

⑤ 简易原理 : 适配器类 实现用户目标接口 , 在该接口的实现类中调用被适配者 , 实现了接口转接的效果 ; 使用的时候 , 通过创建适配器类 , 即可间接调用被适配者方法 ;

II . 适配器模式 适用场景


1 . 功能正确但接口不匹配 : 对于之前开发好的类 , 该类的操作和返回值都是正确的 , 但是其定义的方法接口无法调用 , 此时使用适配器模式 , 使该类与用户的接口匹配 , 让用户使用适配器的接口 , 间接调用该类 ;

2 . 适配器模式使用阶段 : 软件设计开发阶段一般不使用适配器模式 , 在软件维护时 , 出现操作和返回值类似 , 但是函数接口不同 , 为了适配第三方系统的接口 , 使用适配器模式 ;

设计阶段不要使用适配器模式 ;

3 . 适配器的两种实现方式 : 对象适配器模式 与 类适配器 ;

① 对象适配器 : 符合组合复用原则 , 使用了委托机制 ; ( 通过组合实现 , 适配器类中维护被适配者成员 )

② 类适配器 : 通过类的继承实现适配器模式 ; ( 通过继承实现 , 适配器类继承被适配者类 )

推荐使用对象适配器模式 , 在继承与组合二者之间 , 优先选择组合方案 ;

III . 适配器模式 优缺点


1 . 适配器模式 优点 :

① 复用且不修改类 : 不改变现有类的基础上 , 提高类的复用性 , 透明性 ; 让现有类与目标类接口匹配 ;

② 降低耦合 : 目标类 ( 用户调用的接口所在类 ) 和 现有类 ( 被适配者 ) 解除耦合 , 降低了系统的耦合性 , 易于扩展维护 ;

③ 符合开闭原则 : 用户调用适配器接口 , 只与适配器类进行交互 , 如果需要修改扩展 , 只需要修改适配器类即可 , 目标类 和 现有类 各自都是相互独立的 , 互不影响 ;

2 . 适配器模式 优点 :

① 增加复杂性 : 编写适配器类时 , 需要考虑全面 , 包括被适配者 和 目标类 , 系统复杂性会增加 ;

② 降低可读性 : 系统代码可读性降低 , 可维护性降低 ;

阅读代码时 , 调用系统接口 , 如果调用的是适配器接口 , 还要到处找调用的是哪个现有类的实际接口 ;

IV . 适配器模式 与 外观模式对比


1 . 相同点 : 都是对现有类进行封装 ;

2 . 行为分析 :

① 外观模式行为 : 外观模式定义了新街口 , 处理多个子系统之间的交互 ;

② 适配器模式行为 : 适配器模式复用原有接口 , 只是简单的转接了一下 , 使两个现存接口 ( 现有类 和 目标类 ) 协同工作 ;

3 . 适配力度分析 :

① 外观模式 : 适配力度很大 , 需要开发整个子系统之间的交互流程 ;

② 适配器模式 : 修改很少的内容 , 只是进行简单的接口转接交互 , 一般不实现具体的功能 ;

V . 适配器模式 相关角色 ( 重点 )


1 . 被适配者 : 实际功能提供者 , 是系统中原有的类 ;

2 . 用户目标接口 : 用户调用该接口 , 实现功能操作 ; 是适配器的父类接口 ;

3 . 适配器 : 需要实现 用户目标接口 , 并在接口中的操作中 , 调用被适配者提供的实际功能 ; 适配器有两种途径实现 , 分别是类适配器 , 对象适配器 ;

① 类适配器 : 继承被适配者 , 通过 super 访问被适配者方法 ;

② 对象适配器 ( 推荐 ) : 在适配器中维护一个被适配者成员变量 , 通过成员变量访问被适配者方法 ;

VI . 适配器模式 ( 类适配器 ) 代码实现流程 ( 重点 )


1 . 明确被适配者 : 被适配者 是一个现有类 , 该类保持不变 ;

2 . 定义用户目标接口 : 用户通过调用该接口 , 实现实际的功能 , 该功能与适配者中的功能类似 , 但 接口不同 ;

3 . 声明适配器 ( 类适配器 ) :

① 适配器 实现 用户目标接口 : 适配器 需要实现 用户目标接口 , 在实现的接口方法中 , 需要将实际操作 委托给 被适配者 ;

② 适配器 继承 被适配者 : 如何调用到 被适配者 的方法呢 , 这里 适配器 通过 继承 被适配者 , 获取调用 被适配者 方法的资格 ;

③ 委托操作 : 在实现的 用户目标接口中 , 通过 super 关键字 , 调用 被适配者 的方法实现具体功能 ;

类适配器对象适配器 , 本质区别就是 适配器类访问 被适配者的途径 ;
类适配器 : 通过继承 被适配器 , 获取访问被适配器方法的资格 ;
对象适配器 : 通过在其内部维护一个 被适配者 成员变量 , 进而通过该成员变量访问 被适配者方法 ;

4 . 用户访问操作 :

① 定义目标接口变量 : 定义 用户目标接口 对象变量 ;

② 目标接口变量赋值 : 创建 适配器对象 赋值给上述 用户目标接口对象变量 , ( 适配器 是 用户目标接口 的子类 ) ;

③ 目标接口调用 : 调用用户目标接口 , 即可调用被适配者的实际功能方法 ;

VII . 适配器模式 ( 对象适配器 ) 代码实现流程 ( 重点 )


1 . 明确被适配者 : 被适配者 是一个现有类 , 该类保持不变 ;

2 . 定义用户目标接口 : 用户通过调用该接口 , 实现实际的功能 , 该功能与适配者中的功能类似 , 但 接口不同 ;

3 . 声明适配器 :

① 适配器 实现 用户目标接口 : 适配器 需要实现 用户目标接口 , 在实现的接口方法中 , 需要将实际操作 委托给 被适配者 ;

② 适配器 维护 被适配者 类型成员变量 : 如何调用到 被适配者 的方法呢 , 这里 适配器 通过 定义 被适配者 类型的成员变量 , 通过该 被适配者 类型成员变量 , 调用 被适配者 public 方法 ;

③ 委托操作 : 在实现的 用户目标接口中 , 通过 被适配者类型 成员变量 , 调用 被适配者 的方法实现具体功能 ;

类适配器对象适配器 , 本质区别就是 适配器类访问 被适配者的途径 ;
类适配器 : 通过继承 被适配器 , 获取访问被适配器方法的资格 ;
对象适配器 : 通过在其内部维护一个 被适配者 成员变量 , 进而通过该成员变量访问 被适配者方法 ;

4 . 用户访问操作 :

① 定义目标接口变量 : 定义 用户目标接口 对象变量 ;

② 目标接口变量赋值 : 创建 适配器对象 赋值给上述 用户目标接口对象变量 , ( 适配器 是 用户目标接口 的子类 ) ;

③ 目标接口调用 : 调用用户目标接口 , 即可调用被适配者的实际功能方法 ;

【设计模式】适配器模式 ( 概念 | 适用场景 | 优缺点 | 外观模式对比 | 适配器模式相关角色 | 类适配器 | 对象适配器 | 实现流程 )相关推荐

  1. 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )

    文章目录 I . 装饰者模式概念 II . 装饰者模式适用场景 III . 装饰者模式优缺点 IV . 装饰者模式与继承对比 V . 装饰者模式相关设计模式 VI . 装饰者模式四个相关类 VII . ...

  2. 【设计模式】外观模式 ( 概念 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 I . 外观模式概念 II . 外观模式 适用场景 III . 外观模式 优缺点 IV . 外观模式与其它设计模式的联系与区别 V . 外观模式 代码示例 I . 外观模式概念 1 . 外观 ...

  3. Swift 中的设计模式 #3 外观模式与适配器模式

    作者:Andrew Jaffee,原文链接,原文日期:2018-09-04 译者:郑一一:校对:BigNerdCoding,pmst,Forelax:定稿:Forelax 本文是我的设计模式系列教程的 ...

  4. 移动开发 | Swift 中的设计模式 #3 外观模式与适配器模式

    本文是我的设计模式系列教程的第三篇.在第一篇文章中,我介绍了 创建型模式中的工厂模式和单例模式.在第二篇文章中,又讨论了一下 行为型模式中的观察者模式和备忘录模式. 在本文中,我会就结构型模式中的外观 ...

  5. 软件设计模式学习(十四)外观模式

    外观模式是一种使用频率非常高,但理解较为简单的设计模式,通过引入一个外观角色来简化客户端与子系统之间的操作,为复杂的子系统调用提供一个统一的入口,使子系统与客户端的耦合度降低,且客户端调用非常方便. ...

  6. 适配器模式(Adapter)和外观模式(Facade)

    适配器模式(Adapter) 还是先从引入说起,先来看一个问题吧,总所周知,在中国通用的电压时 220V, 而美国电压则是 110V,如果有经常在美国和中国之间跑的 IT 人,而其笔记本都是随身携带的 ...

  7. C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...

    结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...

  8. JavaScript设计模式(三):结构型设计模式-外观模式、适配器模式、代理模式、装饰者模式、桥接模式、组合模式、享元模式

    JavaScript设计模式 - 结构型设计模式 套餐服务-外观模式 外观模式(Facade) 水管弯弯-适配器模式 适配器模式(Adapter) 适配异类框架 参数适配 牛郎织女-代理模式 代理模式 ...

  9. 初学 Java 设计模式(十一):实战外观模式 「类型转换器」

    一.外观模式介绍 1. 解决的问题 主要解决访问复杂系统的内部子系统的复杂度问题,简化客户端与其子系统的接口. 2. 定义 外观模式是一种结构型设计模式,能为程序库.框架或其他复杂类提供一个简单的接口 ...

最新文章

  1. 改变shell read命令的隔符
  2. Linux常用编辑器使用:vi、vim、nano、gedit
  3. Oracle学习(十六)Oracle安装
  4. 鸟哥学习笔记六(基础篇第十一章)
  5. svd奇异值分解_奇异值分解SVD
  6. 应用C语言编辑画图程序
  7. 线上幽灵:世界头号黑客米特尼克自传改
  8. LaTeX 排版(三)——排版样式设定
  9. 【运筹学】CH2 线性规划与单纯形法1——线性规划问题及其数学模型
  10. 关闭windows defender
  11. 苹果ios系统企业级开发者授信下载app时出现:‘此app开发者需要更新’‘出现一朵云app无法打开’有的手机可以打开有的手机无法打开情况解决方案
  12. 如何删除电脑计算机用户名和密码,如何删除电脑设置的密码
  13. BGP选路负载分担的架构设计
  14. VS+QT——二维码生成(使用nayuki第三方库):从建工程开始
  15. P7826 「RdOI R3」RBT
  16. 不懂带人就自己累到死:带团队1核心、4重点、6角色、10注意
  17. 事务4个隔离界别及脏读,不可重复读,幻读
  18. 骐骥一跃 驽马十驾-数据库触发器
  19. 在面试时,向面试官介绍项目的基本要点
  20. 推荐和讯网改革开放三十年系列文章

热门文章

  1. [导入]OpenSceneGraph编译指导
  2. Postman使用方法示例
  3. 为什么阿里巴巴建议集合初始化时,指定集合容量大小
  4. kvm热添加和热迁移
  5. 对于python 3.x与python2.x中新型类的继承特性总结
  6. Python模块EasyGui专题学习
  7. 遇到的问题及解决方法
  8. HDU2866 Special Prime
  9. 你说你精通CSS,真的吗?
  10. 《京东技术解密》读后感