适配器四人帮 结构
也被称为
包装器
意图
将一个类的接口转换为客户期望的另一个接口。Adapter 让那些因为接口不兼容而无法协同工作的类。
解释
真实世界的例子
考虑到您的存储卡上有一些图片,您需要将它们传输到您的计算机。要传输它们,您需要某种与您的计算机端口兼容的适配器,以便您可以将存储卡连接到您的计算机。在这种情况下,读卡器是一个适配器。另一个例子是著名的电源适配器。三脚插头不能连接到两脚插座,它需要使用与两脚插座兼容的电源适配器。另一个例子是翻译者将一个人说的话翻译成另一个人
简单来说
适配器模式允许您在适配器中包装一个原本不兼容的对象,以使其与另一个类兼容。
维基百科说
在软件工程中,适配器模式是一种软件设计模式,它允许将现有类的接口用作另一个接口。它通常用于使现有类在不修改其源代码的情况下与其他类一起使用。
程序示例
考虑一个只能使用划艇而根本不能航行的船长。
首先,我们有接口
RowingBoat
和FishingBoat
并且船长期望
RowingBoat
接口的实现能够移动现在假设海盗要来了,我们的船长需要逃跑,但只有一艘渔船可用。我们需要创建一个适配器,允许船长使用他的划艇技能操作渔船。
而现在
Captain
可以用FishingBoat
来躲避海盗了。类图
适用性
使用适配器模式时
- 您想使用现有的类,但它的接口与您需要的不匹配
- 你想创建一个与不相关或不可预见的类合作的可重用类,即不一定具有兼容接口的类
- 您需要使用几个现有的子类,但通过子类化每个人来调整它们的接口是不切实际的。对象适配器可以适配其父类的接口。
- 大多数使用第三方库的应用程序使用适配器作为应用程序和第三方库之间的中间层,以将应用程序与库解耦。如果必须使用另一个库,则只需要新库的适配器,而无需更改应用程序代码。
教程
结果
类和对象适配器有不同的权衡。类适配器
- 通过提交具体的 Adaptee 类使 Adaptee 适应 Target。因此,当我们想要适配一个类及其所有子类时,类适配器将无法工作。
- 由于 Adapter 是 Adaptee 的子类,让我们让 Adapter 覆盖 Adaptee 的一些行为。
- 只引入一个对象,不需要额外的指针间接来到达适配者。
对象适配器
- 让单个适配器与许多 Adaptee 一起工作——即 Adaptee 本身及其所有子类(如果有)。适配器还可以一次向所有 Adaptee 添加功能。
- 使覆盖 Adaptee 行为变得更加困难。它将需要对 Adaptee 进行子类化,并使 Adapter 引用子类而不是 Adaptee 本身。