适配器模式(Adapter)

设计模式系列

Adapter适配器模式——对象结构模式

1.意图

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

 

2.适用性

  • 你想使用一个已经存在的类,而它的接口不符合你的需求
  • 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
  • (仅使用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口

 

3.结构

类适配器使用多重继承对一个接口与另一个接口进行匹配适配器模式(Adapter)

对象匹配器依赖于对象组合

 

适配器模式(Adapter)

 

4.参与者

  • Target

—— 定义Client使用的与特定领域相关的接口

  • Client

—— 与符合Target接口的对象协同

  • Adaptee

—— 定义一个已经存在的接口,这个接口需要适配

  • Adapter

—— 对Adapter的接口与Target接口进行适配

 

5.协作

  • Client在Adapter实例上调用一些操作。接着适配器调用Adaptee的操作实现这个请求。

 

6.效果

优点:

将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构 增加了类的透明性和复用性,提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用 灵活性和扩展性非常好 类适配器模式:置换一些适配者的方法很方便 对象适配器模式:可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类

缺点:

(1) 一次最多只能适配一个适配者类,不能同时适配多个适配者;

(2) 适配者类不能为最终类;

(3) 目标抽象类只能为接口,不能为类 对象适配器模式:在适配器中置换适配者类的某些方法比较麻烦

使用场景:

1)假设某公司A与某公司B需要合作,公司A需要访问公司B的人员信息,但公司A与公司B协议接口不同,该如何处理?先将公司A和公司B针对各自的人员信息访问系统封装了对象接口。这种场景很适合用适配器模式。

 

7.相关模式

模式Bridge的结构与对象适配器类似,但是Bridge模式的出发点不同:Bridge目的是将接口部分和实现部分分离,从而对它们可以较为容易也相对独立的加以改变。而Adapter则意味着改变一个已有对象的接口。

Decorator模式增强了其他对象的功能而同时又不改变它的接口。因此decorator对应用程序的透明性比适配器要好。结果是decorator支持递归组合,而纯粹使用适配器是不可能实现这一点的。

模式Proxy在不改变它的接口的条件下,为另一个对象定义了一个代理。

 

设计模式系列 https://blog.csdn.net/nie2314550441/article/details/105849726