设计模式之:Adapter适配器模式

来源:互联网 发布:linux 查看命令行历史 编辑:程序博客网 时间:2024/05/29 19:43

Adapter适配器

将一个类的接口转换为客户希望的另外一个接口,Adapter模式使得原来因为不兼容而不能够一起工作的那些类可以一起工作

         -- 具有这个转换能力的就称为适配器。


适配器最早来源于电工方面,因此也被称做变压器模式

原理是对现有对象经过包装再度利用,因此也叫包装模式但是包装还有一种模式叫装饰模式

适配器解决:需要的东西就在眼前,但却不能够用且短时间又无法改造

                        因此采用一个适配器进行需求和眼前资源的适配,填平既有对象需要结果两者之间的落差

                       也就是系统的数据和行为都是正确的,但是接口不对而无法使用

                       我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。

                       适配器主要用于希望复用一些现有的类,但是接口又与复用环境要求不一致的情况!

 

Adapter适配器模式UML类图

Client需要使用象Target这样的接口,但是因为Client期望的接口Target不满足需求

但是有现有的类Adaptee存在,可是Adaptee的接口又与Client不符合

所以新建类Adapter,在TergetAdaptee之间适配以满足Client的需求

 

adapter适配器模式分2种:

类适配器模式:类继承实现,通过多重继承对一个接口和另外个接口进行匹配

                           ->Java不支持多重继承,可extensimplements


说明:

Target目标角色:定义把其它类型转换为何种接口,即Client期望的接口

               原已存在的接口

Adaptee源角色:因为AdapteeTarget接口不符合而需要进行匹配的对象

               原已存在的类

Adapter适配器:在TargetAdatpee之间进行匹配的适配器

               需要新建立的适配器类

Java实现Adapter Pattern –类继承实现

 

 

 

对象适配器模式:对象委托实现

把某个方法的实际处理委托交由其它对象的方法去进行实现


Target目标角色:定义把其它类型转换为何种接口,即Client期望的接口

               原已存在的接口

Adaptee源角色:因为AdapteeTarget接口不符合而需要进行匹配的对象

               原已存在的类

Adapter适配器:在TargetAdatpee之间进行匹配的适配器

               需要新建立的适配器类

Java实现Adapter Pattern –对象委托实现

 

 

 

Adapter适配器模式类继承实现和对象委托实现的比较:

 

 

 

 

总结:

Adapter适配器模式在现有的2个类或接口因为接口不匹配而不能够一起工作

且同时双方都不好重构自我时才应该考虑使用adapter适配器模式,否则不要轻易的采用此设计模式

而是应该在最初发现因为接口不一致时就尽快地对类或接口进行重构

即详细设计阶段尽量不用,代码在服役后扩展功能时需要转换接口才考虑使用此模式。

适配时如果adapter与被匹配的目标功能差别太大时当然就不能使用adapter适配器模式了

例如你不可能通过匹配器将水变成汽油去使用

一般应用场合:对原有系统版本变更->新的类或接口通过适配复用原来的类或接口

              多种数据源与客户端对数据源使用的匹配

              .........