适配器模式的定义

定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.

通俗的说, 就是有 A、B两个接口,

现在要求把A和B安装在一起使用, 两者的接口不一致, 怎么办? 引入一个物体C, 如下图:

引入C物体后, C适应了A的接口, 同时也适应了B的接口, 三者就可以进行组合了

其中的C物体就叫做适配器

适配器模式的类图如下:

其中各个角色:

  1. Target 目标角色: 该角色定义把其他类转换成哪种接口
  2. Adaptee 源角色: 定义要把谁转换成目标角色
  3. Adapter 适配器角色: 适配器模式的核心角色, 它的职责就是把源角色转换成目标角色.

大致代码如下:

适配器模式的应用

适配器模式的优点:

  1. 适配器模式可以让两个没有任何关系的类在一起运行
  2. 增加了类的透明性. 我们访问的Target 目标角色, 但是具体的实现都委托给了源角色, 而这些对高层模块是透明的
  3. 提高了类的复用度. 源角色在原有的系统中还可以正常使用, 而在目标角色中也可以充当新的演员
  4. 灵活性非常好. 某一天, 突然不想要适配器, 删除掉这个适配器就可以了, 其他代码都不用修改

适配器模式的使用场景:

适配器的使用场景只要记住一点就够了: 你有动机修改一个已经投产中的接口时, 适配器模式可能是最适合你的模式. 比如系统扩展了, 需要使用一个已有或新建立的类, 但这个类有不符合系统的接口等

适配器模式最好在详细设计阶段不要考虑它, 它不是为了解决还在开发阶段的问题, 而是解决正在服役的项目问题, 没有一个系统分析师会在详细设计的时候考虑使用适配器模式, 这个模式的主要场景是扩展应用中.


有时源角色并不单单是一个类, 可能是多个类, 这时使用继承明显不行, 因为java并不支持多继承, 这时可以使用类关联等方法, 只要适配器模式的思想不变, 如何实现有多种方法

适配器模式又叫做变压器模式, 也叫做包装模式(装饰模式也叫做包装模式)

适配器模式是一个补偿模式, 或者说是一个"补救"模式, 通常用来解决接口不相容的问题, 在百分之百的完美设计中是用不到的.

23种设计模式之适配器模式相关推荐

  1. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之适配器模式

    · 适配器模式在王者荣耀中的应用 · 应用一:元歌通过傀儡假扮敌方的任意英雄 应用二:王者荣耀iOS与安卓互通 一.简述 简单来讲,适配器模式就是通过一个适配器将一个类的接口变成客户端所期待的另一种接 ...

  2. (六)JAVA设计模式23种设计模式之适配器模式实例demo

    适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的 ...

  3. 23种设计模式(6)-适配器模式

    适配器模式 1.概述 2.适配器模式的用途 3.模式中的角色 4.实现方式 5.类适配器和对象适配器的权衡 6.缺省适配模式 1.概述 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原 ...

  4. 23种设计模式之适配器模式(Adapter)

    适配器模式将一个接口转换成客户希望的另一个接口,从而使接口不兼容的那些类可以一起工作.适配器模式既可以作为类结构型模式,也可以作为对象结构型模式.在类适配器模式中,通过使用一个具体类将适配者适配到目标 ...

  5. 23种设计模式之模板方法

    23种设计模式总篇:chenmingyu.top/design/ 模板方法 模板方法属于行为型模式 定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定 ...

  6. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. 【设计模式】Java 23种设计模式对比总结

    一.设计模式的分类 创建型模式,共五种(1-5):工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种(6-12):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  8. 23种设计模式C++实现UML+源码汇总

    设计模式-汇总 代码开源仓库地址 23种设计模式C++实现 C++中的开闭原则使用C++多态功能实现附源码 C++基于多态实现依赖颠倒原则附源码 C++ 的静态成员变量为什么一定要在类外定义 23种设 ...

  9. 【java】java开发中的23种设计模式详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

最新文章

  1. Android Edittext digits 属性限制输入的内容
  2. git使用的详细过程
  3. 聚焦互联网应用和深度学习
  4. Memcached初探
  5. php使用zeromq
  6. 使用django的权限管理系统permission
  7. matlab激光散斑散射半径测量,激光散斑测量2011412225741
  8. 第八章xgboost/lightGBM
  9. 贝壳如何docker安装openwrt_OpenWrt 中 使用 Docker 安装可道云出错。
  10. Win7怎么设置文件共享 Win7共享设置方法
  11. linux 通配符 元字符 转义字符
  12. CSS-float详解,深入理解clear:both[转+部分原创]
  13. 计算两个经纬度之间的距离
  14. fastreport(B)
  15. 2010nbsp;贱语大全!
  16. mobi电子书如何用Windows电脑阅读?
  17. Objective-C和C++语法比较
  18. 帝国cms系统使用初级教程二(较全面)
  19. 第六届“蓝帽杯”全国大学生网络安全技能大赛-初赛Writeup
  20. IDM+百度网盘提速下载复活版

热门文章

  1. php 去年年初和年底时间,PHP 日期与时间
  2. 检测到磁盘可能为uefi引导_在本地硬盘安装WinPE系统,实现UEFI引导,摆脱U盘
  3. Linux的实际操作:用户管理(删除用户userdel userdel -r)
  4. JAVA入门级教学之(什么是类加载)
  5. JAVAWEB入门之IDEA与tomcat相关配置
  6. oracle 删除系统用户,Oracle数据库如何创建和删除用户
  7. 【LeetCode笔记】剑指 Offer 65. 不用加减乘除做加法(Java、位运算、二刷)
  8. xpath获取标签的属性值_论xpath与css定位方式
  9. 计算机网络数据链路层 --- 选择重传协议(SR)
  10. pakeage php国内镜像,Packagist/Composer中国全量镜像 | 严佳冬