模式介绍
- 对于从事android开发的开发人员对这个模式极其熟悉,从最早的ListView、GridView到现在的RecycleView都需要使用Adapter。适配器是将两个不兼容的类融合在一起,它优点像粘合剂,将不同的东西通过转换使它们能够协助起来。例如,两个没有关系的类进行交互,第一个解决方案是修改各自类的接口,但如果没有源代码的情况下怎么办呢?这种情况下就需要使用一个adapter,这个Adapter会将两个接口进行兼容,在不修改原有代码的情况下满足需求。
定义与类型
- 定义:把一个类的接口变化成客户端需要的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。
- 类型:结构性
使用场景
- 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容
- 想要创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作
- 需要一个统一的输出接口,而输入端的类型不可预知
- 不是系统设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成的功能类似而接口不相同情况下的解决方案
优点
- 能提高类的透明性和复用,现有的类服用但不需要改变
- 目标类和适配器类解耦,提高程序扩展性
- 符合开闭原则
缺点
- 适配器的编写过程需要全面考虑,可能会增加系统的复杂性
- 增加代码可读的难度
扩展
- 对象适配器
- 类适配器
类适配器
![](https://img.haomeiwen.com/i5733856/abff8c2c5f3ecf19.png)
定义
- 如图Class-Adapter所示,适配器是通过实现Target接口以及继承Adaptee类来实现接口转换。
- 目标接口需要的是opration2,但是Adaptee对象只有一个Operation3,因此出现了不兼容的情况,此时通过Adapter实现一个operation2函数,将Adaptee的operation3转换为Target需要的Operation2,以此实现兼容
简单示例
- Adaptee:
public class Adaptee {
public void Operation3(){
System.out.println("被适配者的方法");
}
}
- Target:
public interface Target {
void opration1();
void opration2();
}
- Adapter:
public class Adapter extends Adaptee implements Target{
@Override
public void opration2() {
super. opration3();
}
//...
}
对象适配器
![](https://img.haomeiwen.com/i5733856/b940e6117b71c669.png)
定义
- 与类适配器唯一不同的是,Adapter不是通过继承而是通过依赖关联Adaptee,其他都是一样的。
简单示例
- Adapter:
public class Adapter implements Target{
private Adaptee adaptee = new Adaptee()
@Override
public void opration2() {
adaptee. opration3();
}
//...
}
网友评论