0%

适配器模式

适配器模式

适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作。
适配器可担任两个对象间的封装器, 它会接收对于一个对象的调用, 并将其转换为另一个对象可识别的格式和接口。

问题

当我们使用外部的第三方库以及兼容很久以前的代码时,通常会遇到一些困扰。有可能外部的库提供的接口不兼容我们项目里已有的数据格式,我们又没有这个库的源码无法进行修改;有可能很久以前的代码因为时间很久没有人继续维护了,我们在不修改原来这块代码的同时希望能够继续使用它。

解决方案

创建一个适配器,适配器内部为数据/接口的转换过程,适配器独立于产品的业务逻辑。适配器可以是单向的也可以是双向的,使本来不兼容的两个对象互相兼容。

优点

  • 单一职责原则,你可以将接口或数据转换代码从程序主要业务逻辑中分离。
  • 开闭原则,只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。

缺点

  • 代码整体复杂度增加, 因为你需要新增一系列接口和类。 有时直接更改服务类使其与其他代码兼容会更简单。

模式结构图

实例

完整代码地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SquarePegAdapter extends RoundPeg {
private SquarePeg peg;

public SquarePegAdapter(SquarePeg peg) {
this.peg = peg;
}

@Override
public double getRadius() {
double result;
// Calculate a minimum circle radius, which can fit this peg.
result = (Math.sqrt(Math.pow((peg.getWidth() / 2), 2) * 2));
return result;
}
}

适用场景

  • 某个现成的类它的接口与其它代码不兼容在不改动它的情况下让它兼容
  • 为某个现成的类扩展一些方法等内容时

Java里的InputStreamReader和OutputStreamWriter