设计模式-适配器

适配器模式 (Adapter)

参考: https://github.com/iluwatar/java-design-patterns

wiki

在软件工程中,适配器模式是一种软件设计模式,它允许现有类的接口作为另一个接口使用。它通常用于使现有类与其他类协同工作而不修改源代码。

定义

适配器允许两个不兼容的接口一起工作。这是适配器的真实世界定义。接口可能不兼容,但内部功能应适合需要。适配器设计模式允许通过将一个类的接口转换为客户端期望的接口来协同工作。

故事描述

一位船长需要帆船,但现在只有渔船,代理模式实现帆船,依赖渔船.提供给船长使用.
这里适配器并没有实现实际的功能,而是复用了渔船的功能.

个人理解

适配器允许现有类的接口作为另一个接口使用,可以在不修改源代码情况下,使一个现有的类,与其他类协同工作.

Java 代码

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**
* 船长使用帆船航行
* (客户端)
*/
public class Captain {

private RowingBoat rowingBoat;

public Captain() {}

public Captain(RowingBoat rowingBoat) {
this.rowingBoat = rowingBoat;
}

public void setRowingBoat(RowingBoat rowingBoat) {
this.rowingBoat = rowingBoat;
}

public void row() {
rowingBoat.row();
}

}

/**
* 船长期望的帆船
* (客户端期望的接口)
*/
public interface RowingBoat {

void row();

}

/**
* 渔船
* (需要适配的类)
*/
public class FishingBoat {

private static final Logger LOGGER = LoggerFactory.getLogger(FishingBoat.class);

public void sail() {
LOGGER.info("The fishing boat is sailing");
}

}

/**
* 实现帆船,依赖渔船,适配给船长使用
* (适配器)
*/
public class FishingBoatAdapter implements RowingBoat {

private FishingBoat boat;

public FishingBoatAdapter() {
boat = new FishingBoat();
}

@Override
public void row() {
boat.sail();
}
}