Earth Guardian

You are not LATE!You are not EARLY!

0%

设计模式--结构型:适配器模式

适配器模式:将类的接口转换成客户希望的接口,使得原本由于接口不兼容的类可以一起工作。

适配器模式 Adapter

适配器模式使得接口不兼容的两个类能在一起工作,通俗易懂的例子就是电源适配器

  • 系统中已经存在的类(遗留代码,或者没有源码等),接口并不符合当前需求,使用适配器适配,最大程度上保持代码重用
  • 需要统一的输出接口,但是输入类型不可知

类图结构

0052-Adapter-uml-classdiag.png

结构解析

  • Target
    客户端期望的接口类。
  • Adaptee
    原有的类,或者被适配的类。
  • Adapter
    适配器模式,适配类,用来将 Adaptee 转换为 Target 期望的接口。
  • Client
    客户端,接口调用者。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 1. Target
public class Target {
public void request(){
System.out.println("Target::Request!");
}
}

// 2. Adaptee
public class Adaptee {
public void specificRequest(){
System.out.println("Adaptee::SpecificRequest!");
}
}

// 3. Adapter
public class Adapter extends Target {
private Adaptee adaptee = new Adaptee();

@Override
public void request() {
adaptee.specificRequest();
}
}

// 4. Test, Client
public class TestAdapter {
public static void main(String[] args) {
Target target = new Adapter();
target.request();
}
}

// 5. Result.
Adaptee::SpecificRequest!

总结

  • 优点
    可以将目标类和被适配类解耦,引入适配器类并重用代码;增加了类的透明性和复用性。
  • 缺点
    Java 不支持多重继承,也就是每次只能适配一个类。

参考文档

  • 大话设计模式
  • Android 源码设计模式解析与实战
  • 适配器模式