在软件开发中,经常会遇到这样的情况:现有的类或第三方库提供的接口与系统中期望的接口不匹配。如果直接修改已有代码风险较大或者不可行,这时适配器模式(Adapter Pattern)就能派上用场。适配器模式通过创建一个包装类,将原有接口转换为客户所期望的接口,从而使原本不兼容的类能够协同工作。
本文将从基本概念入手,详细介绍适配器模式的实现方式及其在多个场景下的应用示例,并探讨其优缺点和使用建议。
适配器模式简介
适配器模式是一种结构型设计模式,它的核心思想是通过一个中间层(适配器)将一个类的接口转换成客户期望的另一个接口,从而让原本接口不匹配的类能够一起工作。常见的应用场景包括:
- 集成遗留系统:对接老系统时,接口可能与新系统不兼容;
- 第三方库封装:使用外部库,但接口与项目需求不匹配;
- 数据转换:不同数据格式之间的转换处理。
适配器模式既可以通过对象适配器(基于组合)实现,也可以通过类适配器(基于继承,多用于支持多重继承的语言)实现。由于 JavaScript 不支持多重继承,所以一般采用对象适配器的方式。
适配器模式的分类
- 对象适配器
通过在适配器中组合(引用)需要适配的对象,并在适配器内部调用其方法来完成转换。 - 类适配器
利用继承实现适配器,将目标接口与适配者接口组合在一起。
(在 JavaScript 中,由于语言特性,通常采用对象适配器模式。)
适配器模式的实现示例
下面我们通过三个示例展示如何在不同场景下使用适配器模式解决接口不兼容问题。
示例 1:电源适配器
假设我们有一个旧设备只提供 connect()
方法