适配器模式

适配器模式


概念

有时候在程序中需要对接口进行适配,也就是已有的接口(实现类的方法)在某个业务上不能满足我们的需要,需要我们改写下已有的接口,使之符合我们的需要。但是已有的接口不能动(因为可能项目中其他地方已经在用这个接口),这时候就需要适配器来解决这个问题了。

  • 定义: 适配器模式(Adapter Pattern):将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。

实例

举个例子吧,中国电流标准电压是220v,笔记本电脑需要的电压是20v,这时就需要个电源适配器来让笔记本正常工作了。

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
//电流接口
public interface Electric {
public void display();
}
//国标电流
public class GBElectric implements Electric {
@Override
public void display() {
System.out.println("220V电流");
}
}
//笔记本电脑
public class Computer {
Electric electric;
public Computer (Electric electric) {
this.electric = electric;
}
public void work () {
electric.display();
}
}
//客户端
public class Client {
public static void main(String[] args) {
Electric elec ;
elec = new GBElectric();
Computer computer = new Computer(elec);
computer.work();
}
}
运行结果:
220V电流

运行结果很显然不对,这时就需要我们用适配器来更改下了。

1
2
3
4
5
6
7
//适配器
public class ElectricAdapter extends GBElectric {
@Override
public void display() {
System.out.println("20V电流");
}
}

客户端代码变为:

1
2
3
4
5
6
7
8
9
10
public class Client {
public static void main(String[] args) {
Electric elec ;
elec = new ElectricAdapter();
Computer computer = new Computer(elec);
computer.work();
}
}
运行结果:
20V电流

可以看到我们只是扩展了原本的GBElectric类与改了下客户端代码,原本接口(GBElectric )与后端(Computer)代码不变,完全符合开闭原则。

总结

缺点
  • java不支持多继承,一次只能适配一个接口
适用场景
  • 现有接口不满足业务需求时,需要更改