适配器模式 Adapter
适配器模式种类
- 对象适配器(组合)
- 类适配器(多重继承)
定义
将一个类的接口,转换成客户期望的另一个接口。
适配器让原本接口不兼容的类可以合作无间。
目的
在不改变原有设计的基础上(或者说在无法改变原有设计的时候),为适应新的需求而作出的一种方案。
应用场景
Android中的ListView、RecyclerView的Adapter,通过相同的Adapter接口方法,使用不同的Adapter算法,展现出不同的布局效果。
例子
- 插座和插头
- Java中的枚举器
- 旧API
Enumeration,
hasMoreElements()、nextElement(); - 新API
Iterator,
hasNext()、next()、remove(); - 设计适配器兼容新旧API(继承Interator,组合Enumeration)
EnumerationInterator,
hasNext()、next()、remove(); - 类图
- 旧API
优点
可复用,系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
可扩展,在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
缺点
过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
注意
适配器的工作量,和目标接口的大小成正比。
类图
代码示例
目标接口
|
|
目标接口实现
|
|
被适配者Adaptee
|
|
Adaptee实现类
|
|
适配者Adapter
|
|
测试类
|
|
结果
|
|
代码地址
https://github.com/atopom/java_familiar_strange/tree/master/Code/AdapterPattern