定义:

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

角色:

目标(Target)角色:这就是所期待得到的接口,也就是这类的接口是符合我们要求的。

  源(Adapee)角色:我们要使用的接口,但是这个接口不符合我们的要求,也就是现在需要适配的接口。

适配器(Adaper)角色:适配器类是适配器模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

分类:

1,  类适配器模式

class Adaptee {         publicvoid specificRequest() {System.out.println("特殊请求,这个是源角色");}
}
/*这个是目标角色,所期待的接口*/interface Target {         publicvoid request();
}

现在想要实现这个Target接口,但是不想重构,想要用上已有的Adaptee类,这时可以定义一个适配器类,继承想要使用的类,并且实现期待的接口。

class Adapter extends Adaptee implementsTarget{publicvoid request() {super.specificRequest();}
}

这样,使用适配器类和实现目标接口就完成了计划,测试:

public class Test{publicstatic void main(String[] args) {//使用特殊功能类,即适配类Targetadapter = new Adapter();adapter.request();}
}

2,  对象适配器模式

适配器类关联已有的Adaptee类,并且实现标准接口,这样做的好处是不再需要继承。

class Adapter implements Target{privateAdaptee adaptee;publicAdapter (Adaptee adaptee) {this.adaptee= adaptee;}publicvoid request() {this.adaptee.specificRequest();}
}

我们可以想到,此时输出结果和类适配器模式是相同的,测试:

public class Test{publicstatic void main(String[] args) {Targetadapter = new Adapter(new Adaptee());adapter.request();}
}

区别:

对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。

优点:

复用性

系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。

扩展性

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

缺点:

过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现。所以适配器模式不适合在详细设计阶段使用它,它是一种补偿模式,专用来在系统后期扩展、修改时所用。

适用场景:

1、已经存在的类的接口不符合我们的需求;

2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类协同工作;

3、使用一些已经存在的子类而不需要对其进行子类化来匹配接口。

4、旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

小结:

适配器模式不适合在详细设计阶段使用它,它是一种补偿模式,专用来在系统后期扩展、修改时所用,适配器模式更像是一种补救措施。

23种设计模式(5)-适配器模式相关推荐

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

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

  2. 23种设计模式之适配器模式

    适配器模式的定义 定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 通俗的说, 就是有 A.B两个接口, 现在要求把A和B安装在一 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. macos 全局快捷键 打开 iterm_MouseInc – 完全免费的全局鼠标手势增强工具 | 马小帮...
  2. mysqldump 备份报错
  3. 微服务SpringCloud
  4. P8实战(四):多种分布式锁实现
  5. 简历要避开哪些坑,资深面试官告诉你!
  6. Android开发之RecyclerView滑动到底部的监听方法
  7. drill apache_Apache Drill 1.4性能增强的简要概述
  8. 去调频体制下的 rd算法_【技术文章】一次调频工作原理及控制 学习1+1
  9. C++面试/技巧(四)
  10. 计算机对环境的影响的案例,计算机环境下的呈现方式对学生样例学习的影响
  11. LGD模型开发细节|全网首发
  12. 如何在Mac上删除其他存储
  13. 浅谈前端面向对象oop思想
  14. xboxone硬盘坏的表现_电脑硬盘用段时间如果损坏,我们该怎样修理硬盘???...
  15. 使用 Spirent TestCenter 进行 4-7 层测试
  16. 选题难没思路?3招教你轻松建立小红书爆款选题库
  17. 在 Node.js 应用中集成 Redis
  18. 图论中握手定理的详细解释
  19. base64转MultipartFile并压缩得到压缩后对的MultipartFile
  20. 计算机主板维修高手,计算机电路基础与维修高手

热门文章

  1. 换脸App爆红引发人脸盗刷担忧?看到支付宝的回应放心了...
  2. 海量个人信息被泄漏 央视首次曝光智能呼叫机器人
  3. 抖音国际版TikTok因收集儿童信息在美被罚570万美元
  4. 串口的输出设置【原创】
  5. 前端、后台和连接前端后台的网络数据传输
  6. java 怎么使用同名类_java两个不同名类 在里面建立两个同名的类 怎么破
  7. 爬虫教程 python3_【Python3爬虫】Appium入门教程
  8. C++和Delphi工程0.5四舍五入问题的的排查
  9. EXP-00011: XX.tab does not exist
  10. 【elasticsearch】跨集群搜索