跳到主要内容

适配器模式

适配器模式是对不兼容对象的包装,以便将其接口转换为客户端所期望的接口。适配器允许已有的类与其他类一起工作,而不需要修改其源代码。

结构

适配器模式通常可通过组合继承来实现。

组合实现(对象适配器)

适配器模式组合实现示意图适配器模式组合实现示意图

在组合模式中,适配器包含一个适配对象,然后通过调用适配对象的方法来实现目标接口。

继承实现(类适配器)

适配器模式继承实现示意图适配器模式继承实现示意图

在继承模式中,适配器同时继承了适配类和目标接口,然后通过重写目标接口的方法并在其中调用适配类的方法来实现目标接口。

提示

由于使用了多重继承,类适配器模式在一些语言中可能无法实现。

应用场景

  • 当你希望将某个类的接口转换为客户端所期望的接口时
  • 当希望为一系列具有继承关系的类扩展方法,却不想为每个类都添加扩展的方法时

优缺点

优点

  • 避免创建者和具体产品之间的紧密耦合。
  • 单一职责原则。将接口或数据转换代码从程序主要业务逻辑中分离。
  • 开闭原则。只要客户端接口不发生变化,可以随意更改适配器以实现扩展。

缺点

  • 额外的类和对象会增加代码复杂度。

代码示例

下面的代码示例中,RoundHole 类(客户端)希望使用 RoundPeg 接口的对象。但现在我们有一个 SquarePeg 类(适配者),它的接口与 RoundPeg 不兼容。

为了让 SquarePeg 能够适配 RoundHole,我们创建了一个 SquarePegAdapter。这个适配器包装了 SquarePeg 对象,并实现了 RoundPeg 接口,使得客户端代码(RoundHole)可以透明地使用它。