23种设计模式+额外常用设计模式汇总 (持续更新)

适配器模式(Adapter)

适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。

实际上就是对类或者对象,找到一个翻译,能够使得源对象能够匹配到现对象。

软件系统设计和开发的问题

在软件系统设计和开发中,这种问题也会经常遇到:
有时为了完成某项工作购买了一个第三方的库来加快开发。这就带来了一个问题:我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类(不能在-起工作)可以在一起工作,Adapter模式提供了将一个类(第三方库)的接口转化为客户(购买使用者)希望接口的方法。

两种形式

  • 类的适配器模式
  • 对象的适配器模式

适配器模式结构


从图中可以看出:客户端需要调用Request方法,而Adaptee没有该方法,为了使客户端能够使用Adaptee类,需要提供一个包装(Wrapper) 类Adapter。这个包装类包装了一个Adaptee 的实例,从而将客户端与Adaptee衔接起来。由于Adapter与Adaptee是委派(组合)关系,这决定了这个适配器模式是对象的。

  • 目标(Target)角色这是客户所期待的接口。目标可以是具体的或抽象的类也可以是接口。
  • 源(Adaptee)角色需要适配的类
  • 适配器(Adapter)角色通过在内部包装(Wrap)一个Adaptee对象,把源接口转换成目标接口。

实现要点

  • Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
  • Adapter模式有对象适配器和类适配器两种形式的实现结构
    类适配器采用“多继承”的实现方式带来了不良的高耦合,所以一般不推荐使用。
    对象适配器采用“对象组合”的方式,更符合松耦合精神。

使用情况

  • 系统需要使用现有的类,而此类的接口不符合系统的需要。
  • 想要建立一个有以重复使用的类,该类可能与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
  • (对对象适配器而言)在设计里,你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配。对象适配器可以适配它们的父类接口(使用的扩展)。

优点

  • 更好的复用性
  • 更好的可扩展性
    在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能

缺点

过多地使用适配器,会让系统非常凌乱,不容易整体进行把握。

本质

转换匹配,复用功能。

实现

用户能看到的接口

package 适配器模式;public class Target {public void Reuqest() {System.out.println("一般请求");}
}

需要适配的类

package 适配器模式;public class Adaptee {public void specifiRequest(){System.out.println("特殊请求");}
}

适配器

package 适配器模式;public class Adapter extends Target  {private Adaptee adp=new Adaptee();@Overridepublic void Reuqest() {adp.specifiRequest();}}

客户端

package 适配器模式;public class Client {public static void main(String[] args) {Target target=new Adapter();target.Reuqest();}
}

『设计模式』适配器模式(Adapter)相关推荐

  1. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...

  2. 【设计模式】—— 适配器模式Adapter

    模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...

  3. 『设计模式』之小试牛刀

    为了更好的学习设计模式,以及督促自己完成设计模式的学习,现提笔为记. 怎么的,每周至少也要学一个设计模式!!! 恳请大家的监督和不吝赐教,共同学习和进步! 内容主要参考自<设计模式之禅>以 ...

  4. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  5. 设计模式之适配器模式(Adapter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  7. 『设计模式』不看就亏了的设计模式总结

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  8. 二十三种设计模式[6] - 适配器模式(Adapter Pattern)

    前言 适配器,属于类结构型模式.<设计模式 - 可复用的面向对象软件>一书中将之描述为" 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可 ...

  9. java设计模式adapter,java设计模式-适配器模式(Adapter)

    定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极 ...

最新文章

  1. [从菜鸟到高手演变]之智力题【史上最全】 (转)
  2. 压力测试即将开始,超前思维的128MB区块未必可行
  3. Shell遍历hadoop目录的批量操作
  4. HTML5 — 让拖放变的流行起来
  5. TD商用将迈重要一步 六大运营商年底建网试验
  6. 机器学习知识总结系列- 知识图谱(0-0)
  7. php清轩聚合登录平台网站源码
  8. 人工智能的数学基础(一):绪论
  9. RK3399封装(CPU+GPU)Mali-T860 Codec架构(十六)
  10. C#之整数与字符串互转
  11. 因为计算机丢失user32.dll,user32dll丢失程序打不开|Win7系统开机提示Uxtheme.dll丢失如何解决?...
  12. 写在发现谷歌拼音输入法网站消失的今天
  13. 七彩安卓影视APP源码独立解析接口
  14. nodejs后端接入阿里云《天眼数聚》银行卡四要素验证
  15. 有学生表Student, 课程表Course, 学生选课表StudentCourse
  16. 统计通话次数和时间的软件_通话时间统计下载
  17. js msgbox 插件
  18. 思科 交换机 全局、telnet、consol 密码配置
  19. 2021 年最佳开源软件榜单,Python 高性能框架 FastAPI 上榜了!
  20. 春季高考计算机专业专业分值,春季高考考哪些课程?各占分值多少?

热门文章

  1. No relevant classes found. No output generated、metaObject连接错误
  2. Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总
  3. 狄利克雷分布公式_深入机器学习系列11-隐式狄利克雷分布
  4. 海南大学计算机科学与技术专业考研,2021年海南大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  5. UILocalNotification详解
  6. 【BootStrap】初步教程
  7. NSubstitute完全手册(一)入门基础
  8. hadoop中job.setOutputFormatClass(PartitionByCoun...
  9. 纪年法:公元和公元前
  10. c语言char类型溢出,C语言中数据溢出的问题---以char类型为例