1. 人人编程首页
  2. 架构设计

适配器设计模式

意图

  • 将一个类的接口转换为客户期望的另一个接口。Adapter 让那些因为接口不兼容而无法协同工作的类。
  • 用新接口包装现有类。
  • 阻抗匹配旧组件到新系统

问题

“现成的”组件提供了令人信服的功能,您希望重用它们,但它的“世界观”与当前正在开发的系统的理念和体系结构不兼容。

讨论

重用一直是痛苦和难以捉摸的。一个原因是设计新的东西,同时重用旧的东西的苦难。新旧之间总是有一些不太对劲的地方。它可能是物理尺寸或错位。它可能是定时或同步。这可能是不幸的假设或竞争标准。

这就像在旧的两孔壁式插座中插入新的三孔电源插头的问题 – 某种适配器或中介是必要的。

适配器设计模式

适配器是关于创建一个将旧组件转换或映射到新系统的中间抽象。客户端调用适配器对象上的方法,将它们重定向到对遗留组件的调用。该策略可以通过继承或聚合来实现。

适配器用作现有类的包装器或修饰符。它提供了该类的不同或翻译视图。

结构

下面,传统的 Rectangle 组件的display()方法期望接收“x, y, w, h”参数。但是客户端想要传递“左上 x 和 y”和“右下 x 和 y”。这种不协调可以通过添加一个额外的间接级别来解决——即一个适配器对象。

适配器设计模式

The Adapter could also be thought of as a “wrapper”.

适配器设计模式

例子

适配器模式通过将一个类的接口转换为客户端期望的接口来允许其他不兼容的类一起工作。套筒扳手提供了适配器的一个示例。如果驱动器的尺寸相同,则插座连接到棘轮上。美国的典型驱动器尺寸为 1/2″ 和 1/4″。显然,除非使用适配器,否则 1/2″ 驱动棘轮将不适合 1/4″ 驱动套筒。一个 1/2″ 到 1/4″ 的适配器有一个 1/2″ 母接头,可以安装在 1/2″ 驱动棘轮上,还有一个 1/4″ 公接头,可以安装在 1/4″ 驱动套筒上。

适配器设计模式

检查清单

  1. 识别参与者:想要适应的组件(即客户端)和需要适应的组件(即适应者)。
  2. 确定客户端需要的接口。
  3. 设计一个“包装”类,可以“阻抗匹配”适配者到客户端。
  4. 适配器/包装类“有一个”适配器类的实例。
  5. 适配器/包装类将客户端接口“映射”到适配器接口。
  6. 客户端使用(耦合到)新接口

经验法则

  • 适配器在设计完成后就可以工作;Bridge 让它们先于它们工作。
  • Bridge 是预先设计的,让抽象和实现独立变化。改装适配器以使不相关的类一起工作。
  • 适配器为其主题提供了不同的接口。代理提供相同的接口。装饰器提供了一个增强的接口。
  • 适配器旨在更改现有对象的接口。装饰器在不改变其接口的情况下增强另一个对象。因此,装饰器对应用程序比适配器更透明。因此,装饰器支持递归组合,这在纯适配器中是不可能的。
  • Facade 定义了一个新接口,而 Adapter 重用了一个旧接口。请记住,适配器使两个现有接口协同工作,而不是定义一个全新的接口。

本文来自转载,原文链接:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注