简单介绍
适配器模式是一种结构型设计模式 | 它能使接口不兼容的对象能够相互合作。(是适配各种不同接口的一个中间件)
基础理解
举个例子:当你引用了一个第三方数据分析库,但这个库的接口只能兼容JSON 格式的数据。但你需要它能接收核心类处理后产生的 XML 文件。
而且因为这个库不是你写的,所以你不能对其源码进行修改成接收XML格式的文件。
解决:这时候你就可以创建一个适配器。能够在转换对象的接口,将XML 格式转换为JSON 格式。你甚至可以创建一个双向适配器来实现双向转换调用来实现不通过接口对象之间的合作。
适配器不仅可以转换不同格式的数据, 其还有助于采用不同接口的对象之间的合作。
UML图
-
客户端 (Client) 是包含当前程序业务逻辑的类。
-
客户端接口 (Client Interface) 描述了其他类与客户端代码合作时必须遵循的协议。
-
服务 (Service) 中有一些功能类 (通常来自第三方或遗留系统)。 客户端与其接口不兼容, 因此无法直接调用其功能。
-
适配器 (Adapter) 是一个可以同时与客户端和服务交互的类: 它在实现客户端接口的同时封装了服务对象。
客户端代码只需通过接口与适配器交互即可, 无需与具体的适配器类耦合。
类适配器:适配器同时继承两个对象的接口(仅能在支持多重继承的编程语言中实现 c++)
类适配器只是继承了客户端接口和服务 的行为。将适配功能用重写的方式完成
实现方式
确保至少有两个类的接口不兼容:
- 一个无法修改 (通常是第三方、 遗留系统或者存在众多已有依赖的类) 的功能性服务类。
- 一个或多个将受益于使用服务类的客户端类。
#include <iostream>
#include <stdlib.h>
// 双端队列(已有实现的类和接口,第三方类等等)
class Deque
{
public:
void push_back(int x) {
std::cout << "Deque push_back" << std::endl