1. 适配器模式介绍
我们在日常生活中,会经常接触到设配器模式,比如我们的充电器,不同的手机接口类型可能不一样,这个时候只要一个转接口,就可以解决我们的问题。这个转接口就是我们的适配器。
定义
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起的两个类能够在一起工作。
2. 适配器模式的使用场景
- 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
- 需要一个统一的输出接口,而输入端的类型不可预知。
3. 适配器模式的UML类图
类适配器模式UML:
对象适配器模式UML:
4. 适配器模式的简单实例
类适配器模式
- (1)、目标接口Target
public interface Target {
/**
* 源Adaptee中有的方法
*/
public void operation1();
public void operation2();
}
目标接口中有两个方法,operation1()是源Adaptee中有的方法,operation2()是没有的方法。
- (2)、Adaptee角色:
public class Adaptee {
public void operation1() {
System.out.println("operation1");
}
}
Adaptee角色中只有一个和接口中名称一样的方法operation1()。
- (3)、Adapter角色:
public class Adapter extends Adaptee implements Target {
@Override
public void operation2() {
//相关代码
System.out.println("operation2");
}
}
在Adapter角色中,继承了Adaptee类,同时实现了Target接口,这样Adaptee中有了两个方法。
- (4)、测试类:
public class Client {
public static void main(String[] args) {
Adapter adapter = new Adapter();
adapter.operation1();
adapter.operation2();
}
对象适配器模式
对象适配模式和类适配模式的区别在于Adapter类中,对象适配模式的Adapter类如下:
public class Adapter {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void operation1(){
this.adaptee.operation1();
}
public void operation2(){
}
}
在Adapter的构造方法中,传递进来一个Adaptee对象引用,Adapter类中有接口的两个方法,operation1()直接调用adaptee中的operation1()方法;operation2()实现具体的逻辑即可。
选择那种方法?
在Adapter的使用过程中,尽量使用对象适配器的实现方式,多用合成或者聚合,少用继承。因为类只能继承一次,具有局限性。
5. 适配器模式在Android源码中
我们在开发中都使用过ListView,使ListView填充起来的就是Adapter,Adapter的作用就是将不同的Item填充到不同的View中。这里的Adaptee就是需要被处理的item View,Target角色就是View。
6. 总结
- 优点:
- 更好的复用性。系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
- 更好的扩展性。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
- 缺点:
- 过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如调用的是A接口,却调用的是B的实现。
时间: 2024-11-08 20:19:29