设计模式之——适配器模式详解
2014-04-19 22:00
197 查看
这次跟大家分享一下我对适配器模式的理解。
适配器模式的定义:
将一个类的接口转换成用户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类,可以一起工作了。
举个我们日常生活中的例子:
有一部移动电源,有一部iphone一部android手机,需要充电使用普通的Usb线就可以给android手机充电,而在给iphone充电的时候必须使用适配iphone的万能转接头才能充电。
iphone和android就相当于两个不兼容的接口,转接头就相当于一个适配器,他使得iphone和android手机都能充电了。
在我们的项目中可以这样是用适配器模式:
加入我们开发一个发说说动态的功能,第一版要求可以发送文字,实现如下:
实现方式如上所述,很简单。如果第二版要求既可以发图片也可以发文字动态,实现如下:
上述方法实现是否有问题?肯定是不行的,因为发送文字的方法之前已经实现了,完全没必要再去实现一次。如果重复的方法有很多呢,这样肯定不行了。
对于这种接口不兼容的问题,使用适配器模式可以很好的解决:
适配器模式的模型如下:
上面就是使用适配器的实现方式。在上述的实现方式中,target1和target2都是业务层面的接口,他们有不同的业务功能,对于客户端来说,调用target1接口时很正常,但是要兼容target2的功能的时候,就需要有一个类实现target1 的功能,并且兼容了target2功能的类,Adapter就是这样的一个类,他就是一个转换器,兼容不同的接口来实现功能。
在上面的实现中,实质上是使用对象组合来实现业务功能的兼容。使用适配器可以使已有功能复用,加快开发效率,减少维护成本,在Adapter中也可以加入一些自己实现的公用方法,这样可以使得Adapter的功能更强大。在一个系统中不应该过多的使用Adapter类,如果不是很有必要则不需要使用,使用过多,会使得系统变得凌乱,不好把握,明明调的是A接口但是返回的是B结果。
适配器模式的最重要的一点就是,对象组合,转换匹配,复用功能。
适配器模式的定义:
将一个类的接口转换成用户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类,可以一起工作了。
举个我们日常生活中的例子:
有一部移动电源,有一部iphone一部android手机,需要充电使用普通的Usb线就可以给android手机充电,而在给iphone充电的时候必须使用适配iphone的万能转接头才能充电。
iphone和android就相当于两个不兼容的接口,转接头就相当于一个适配器,他使得iphone和android手机都能充电了。
在我们的项目中可以这样是用适配器模式:
加入我们开发一个发说说动态的功能,第一版要求可以发送文字,实现如下:
public interface ISendTextPost{ public void sendTextPost(); } public class SendTextPost implements ISendTextPost{ public void sendTextPost{ //发送文字动态 } }
实现方式如上所述,很简单。如果第二版要求既可以发图片也可以发文字动态,实现如下:
public interface ISendPicturePost{ public void sendTextPost(); pubiic void sendPicturePost(); } //假如发文字和图片是这样的~~ public class SendPicturePost implements ISendPicturePost{ public void sendTextPost{ //发送文字动态 } public void sendPicturePost{ //发送图片动态 } }
上述方法实现是否有问题?肯定是不行的,因为发送文字的方法之前已经实现了,完全没必要再去实现一次。如果重复的方法有很多呢,这样肯定不行了。
对于这种接口不兼容的问题,使用适配器模式可以很好的解决:
适配器模式的模型如下:
/* * 用户所需功能接口 target1 */ public interface ITarget1{ public void doTarget1(); } //target1实现类 public class Target1Impl implements ITarget1{ public void doTarget1(){ //做A事情 } } /* * 用户所需功能接口 target2 */ public interface ITarget2{ public void doTarget2(); } //target2实现类 public class Target2Imp implements ITarget2{ public void doTarget2(){ //做B事情 } } /* * 适配器 */ public class Adapter implements ITarget1, ITarget2{ private ITarget1 target1; private ITarget2 target2; public Adapter(ITarget1 target1,ITarget2 target2){ this.target1 = target1; this.target2 = target2; } public void target1(){ //做A事情 target1.doTarget1(); } public void doTarget2(){ //做B事情 target2.doTarget2(); } } //Client public class Client { public static void main(Sting[] args){ ITarget1 target1 = new Target1Impl(); ITarget2 target2 = new Target1Imp2(); Adapter adapter = new Adapter(target1,target2); adapter.doTarget1(); adapter.doTarget2(); } }
上面就是使用适配器的实现方式。在上述的实现方式中,target1和target2都是业务层面的接口,他们有不同的业务功能,对于客户端来说,调用target1接口时很正常,但是要兼容target2的功能的时候,就需要有一个类实现target1 的功能,并且兼容了target2功能的类,Adapter就是这样的一个类,他就是一个转换器,兼容不同的接口来实现功能。
在上面的实现中,实质上是使用对象组合来实现业务功能的兼容。使用适配器可以使已有功能复用,加快开发效率,减少维护成本,在Adapter中也可以加入一些自己实现的公用方法,这样可以使得Adapter的功能更强大。在一个系统中不应该过多的使用Adapter类,如果不是很有必要则不需要使用,使用过多,会使得系统变得凌乱,不好把握,明明调的是A接口但是返回的是B结果。
适配器模式的最重要的一点就是,对象组合,转换匹配,复用功能。
相关文章推荐
- 设计模式之适配器模式详解
- 设计模式详解——适配器模式
- Java经典设计模式之适配器模式原理与用法详解
- C++适配器模式详解--设计模式(3)
- 详解JavaScript实现设计模式中的适配器模式的方法
- 深入理解JavaScript系列(39):设计模式之适配器模式详解
- [置顶] 【设计模式】之适配器模式详解与应用(七)
- 深入理解JavaScript系列(39):设计模式之适配器模式详解
- Java开发中的23种设计模式详解----适配器模式
- 走穿23种设计模式-8适配器模式详解
- 与接口相关的设计模式(1):定制服务模式和适配器模式详解
- 设计模式详解之适配器模式
- 设计模式之 适配器模式详解
- java 设计模式之适配器模式的详解
- 设计模式之适配器模式 adapter 适配器模式分类概念角色详解 类适配器 对象适配器 接口适配器 双向适配器
- 详解JavaScript实现设计模式中的适配器模式的方法
- 设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 详解
- 设计模式 - 适配器模式(adapter pattern) 详解
- Java 设计模式之适配器模式的详解(结构模式)
- 设计模式——适配器模式详解