这次跟大家分享一下我对适配器模式的理解。
适配器模式的定义:
将一个类的接口转换成用户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类,可以一起工作了。
举个我们日常生活中的例子:
有一部移动电源,有一部iphone一部android手机,需要充电使用普通的Usb线就可以给android手机充电,而在给iphone充电的时候必须使用适配iphone的万能转接头才能充电。
iphone和android就相当于两个不兼容的接口,转接头就相当于一个适配器,他使得iphone和android手机都能充电了。
在我们的项目中可以这样是用适配器模式:
假如我们开发一个发发动态的功能,第一版要求可以发送文字,实现如下:
1 | public interface ISendTextPost{ |
实现方式如上所述,很简单。如果第二版要求既可以发图片也可以发文字动态,实现如下:
1 | public interface ISendPicturePost{ |
上述这样实现可以吗?答案是必须不行的,因为发送文字的方法之前已经实现了,完全没必要再去实现一次。如果重复的方法有很多呢,估计都想砸键盘了。
对于这种接口不兼容的问题,使用适配器模式可以很好的解决:
适配器模式的模型如下:
1 | // 用户所需功能接口 target1 |
上面就是使用适配器的实现方式。在上述的实现方式中,target1
和target2
都是业务层面的接口,他们有不同的业务功能,对于客户端来说,调用target1
接口时很正常,但是要兼容target2
的功能的时候,就需要有一个实现了target1
功能,并且兼容了target2
功能的类,Adapter
就是这样的一个类,他就是一个转换器,兼容不同的接口来实现功能。
在上面的实现中,实质上是使用了对象组合
来实现业务功能的兼容。使用Adapter
可使得已有功能复用,加快开发效率,减少维护成本,在Adapter
中也可以加入一些自己实现的公用方法,这样可以使得Adapter的功能更强大。
但是要注意的一点是,在一个系统中不应该过多的使用Adapter模式
,使用过多,会使得系统变得比较凌乱,不好把握,本来明明调的是A接口但是返回的是B结果,因此在使用适配器模式时要记住这一点。
适配器模式的最重要的一点就是,对象组合,转换匹配,复用功能。