适配器模式

适配器模式将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作。

适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者:这种做法还有额外的优点,那就是被适配者的任何子类,都可以搭配着适配器使用。

适配器模式示意图

面向对象适配器
面向对象适配器

将火鸡包装成鸭子的适配器代码实现

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public interface Duck {
void quack();
void fly();
}
public class MallardDuck implements Duck {
@Override
public void quack() {
log.info("Quack ");
}
@Override
public void fly() {
log.info("I'm flying");
}
}
public interface Turkey {
void gobble();
void fly();
}
public class WildTurky implements Turkey {
@Override
public void gobble() {
log.info("Gobble gobble");
}
@Override
public void fly() {
log.info("I'm flying a short distance");
}
}
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey=turkey;
}
@Override
public void quack() {
this.turkey.gobble();
}
@Override
public void fly() {
this.turkey.fly();
}
}

客户使用适配器的过程如下

客户通过目标接口调用适配器的方法对适配器发出请求
适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口
客户接收到调用的结果,但并未察觉到这一切都是是配置在起转换作用。

类图