设计模式篇-适配器模式

介绍

适配器是什么?如果你购买过港版的苹果产品,想必知道香港的插座和国内的插座不一样,要在国内使用,就必须用适配器更改插头的接口,以符合港版苹果的要求。

adapte

在设计模式中,适配器模式扮演相似的角色,他的职责是将一个接口转换成客户希望的另一个接口。

案例

现在让我们实现大陆和香港的插座和插头。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//大陆的插座只能使用大陆的插头供电
public class ChinaElectricalSocket {
public void plugIn(ChinaPlugConnector plug) {
plug.provideElectricity();
}
}
public interface ChinaPlugConnector {
public void provideElectricity();
}
//香港的插座只能使用香港的插头供电
public class HKElectricalSocket {
public void plugIn(HKPlugConnector plug) {
plug.provideElectricity();
}
}
public interface HKPlugConnector {
public void provideElectricity();
}

为了让刚买的港版IPAD能使用大陆的插座,需要一个适配器将HKPlugConnector转换为ChinaPlugConnector

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class HKToChinaPlugConnectorAdapter implements ChinaPlugConnector {
private HKPlugConnector plug;
public HKToChinaPlugConnectorAdapter(HKPlugConnector plug) {
this.plug = plug;
}
@Override
public void provideElectricity() {
plug.provideElectricity();
}
}

这样就可以给港版IPAD充电了。

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
ChinaElectricalSocket chinaElectricalSocket = new ChinaElectricalSocket();
chinaElectricalSocket.plugIn(new HKToChinaPlugConnectorAdapter(new HKPlugConnector() {
@Override
public void provideElectricity() {
System.out.println("charging ......");
}
}));
}

小结

什么是适配器模式

将一个类的接口,转换成期望的另一个接口。适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。

UML
ObjectAdapte

实际应用