1.定义

适配器模式(Adapter)指的是将一个类的接口转换成另一个可以兼容的接口。比如我们日常生活中的转换头、古早时期使用的电池万能充,就相当于程序中使用的适配器模式。

2.适配器模式的种类

2.1.类适配器模式

类适配器模式通过多重继承,将一个接口与另一个接口进行匹配。而对于一些面向对象语言如C#、Java不支持多重继承,那么我们就可以继承一个类,同时实现多个接口来达到适配器的效果。如下图所示:

  • Adaptee:适配者类,它是需要被访问的、需要被适配的组件
  • Target:目标接口,当前系统业务所使用的接口,可以是抽象类或接口
  • Adapter:适配器类,通过继承和实现目标接口,让客户端按照目标接口的方法访问适配者
  • Client:客户端,适配器的使用者

2.2.对象适配器模式

对象适配器模式相对于类适配器的不同点在于,对象适配器中适配者类和适配器类的耦合度要更低。如下图所示:

  • Adaptee:适配者类,它是需要被访问的、需要被适配的组件
  • Target:目标接口,当前系统业务所使用的接口,可以是抽象类或接口
  • Adapter:适配器类,通过聚合和实现目标接口,让客户端按照目标接口的方法访问适配者
  • Client:客户端,适配器的使用者

3.手写适配器模式举例

3.1.类适配器模式

被适配类

//被适配类
public class Adaptee {public void specificRequest(){System.out.println("我是适配者类");}
}

目标接口

//目标接口
public interface Target {public void request();
}

类适配器类

//适配器类
public class Adapter extends Adaptee implements Target{@Overridepublic void request() {specificRequest();}
}

测试

public class Test{public static void main(String[] args) {Target target = new Adapter();target.request();}
}

3.2.对象适配器模式

被适配类

//被适配类
public class Adaptee {public void specificRequest(){System.out.println("我是适配者类");}
}

目标接口

//目标接口
public interface Target {public void request();
}

对象适配器类

//对象适配器类
public class ObjectAdapter implements Target{private Adaptee adaptee;public ObjectAdapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}

测试

public class Test{public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new ObjectAdapter(adaptee);target.request();}
}

4.优缺点:

优点:

  • 复用性
  • 扩展性

缺点:

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

5.适用场景:

  • 想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口。
  • 想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时候需要什么就适配什么。
  • 想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,直接适配这些子类的父类就可以了。

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

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

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

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

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

  3. 『设计模式』适配器模式(Adapter)

    23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...

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

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

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

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

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

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

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

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

  8. C++设计模式之适配器模式(adapter)(结构型)

    一.结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. 结构型模式可以分 ...

  9. 设计模式之适配器模式(Adapter Class/Object)

    1.解析 定义 : 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作; 宗旨 : 保留现有类所提供的服务,向客户提供接口,以满足客 ...

  10. C#设计模式(7)——适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将"将现存的对象" ...

最新文章

  1. php中定义css样式的好处,CSS的优点和缺点分别是什么
  2. angularjs1.X进阶笔记(3)——如何重构controller
  3. sd卡测速工具_怎样恢复SD卡数据?教你两招轻松恢复
  4. java多线程基本概述(二)——Thread的一些方法
  5. 【动态规划】牛客网:把数字翻译成字符串
  6. c++学习笔记--C++Primer第4版--标准库类型string
  7. 秒懂三层交换机的作用及使用
  8. 不知道华为手机识别图片文字怎么弄?2个识别方法收好了
  9. OCR表格识别—(一)
  10. 小工具二:报文比对工具
  11. 普罗米修斯(prometheus)应用
  12. iNode客户端“未收到服务器回应,即将强行下线,请检查终端能否正常访问网络或者与管理员联系”问题与解决方式
  13. Simulink简单模型
  14. 最近在写一款斗地主游戏,写了个癞子匹配顺子的算法
  15. [WP/CTFshow]XSS Web316-333
  16. 深入了解JVM锁升级过程
  17. 一机难求的折叠手机:是未来趋势还是小众需求?
  18. 数据可视化 - 象形柱状图
  19. Mac环境下pandas的安装与学习
  20. Graph Neural Network(GraphSAGE,GAT)

热门文章

  1. 天美时和可口可乐联合推出限量版腕表
  2. IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)
  3. 获取企业微信的群组 ID
  4. 重阳节|九九重阳,感恩父母
  5. 分布式链路追踪之Spring Cloud Sleuth夺命连环9问?
  6. 1500元平板性价比推荐2023 1500元平板电脑哪款好
  7. 手机游戏服务端怎么找到_做手机游戏14年,我们有这样一些心得和你聊
  8. 海康威视导出监控视频教程(详细版)
  9. 手游绝地求生战地服务器未响应,绝地求生刺激战场卡在加载中不动怎么办
  10. 电信智能手机CDMA2000选购