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

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

文章目录

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 . 用户访问操作 :



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


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


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


目录
相关文章
|
13天前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
2月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
35 0
|
2月前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
59 0
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
1月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
1月前
|
设计模式 安全 Java
Kotlin - 改良设计模式 - 构建者模式
Kotlin - 改良设计模式 - 构建者模式
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
45 1
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
33 3