设计模式之适配器模式 -- C++

6. 适配器模式 -- 接口不同,转换器

简介

适配器模式(Adapter Pattern)是一种结构型设计模式,用于解决两个不兼容接口之间的兼容性问题。它允许一个类(适配器)将一个接口转换成另一个客户端代码期望的接口,以便它们可以一起工作。

使用场景

适配器模式是在以下情况下特别有用的:

  1. 集成旧系统:当你需要将新系统与已经存在的旧系统或第三方库集成时,可能会发现它们的接口不兼容。适配器模式允许你创建一个适配器,以便新系统可以与旧系统进行通信,而不必修改旧系统的源代码。

  2. 复用已有类:有时,你可能希望重用一个已有的类,但它的接口与你的要求不匹配。适配器模式允许你创建一个适配器类,将已有类包装起来,以便符合你的需求。

  3. 多态性支持:当你希望让不同类之间实现多态性,但它们具有不同的接口时,适配器模式可以帮助你将它们的接口统一,使它们可以一起工作。

  4. 接口扩展:有时,你可能需要扩展一个接口的功能,但又不希望改变所有实现该接口的类。适配器模式允许你创建一个适配器,只在需要时添加或修改接口的某些方法。

  5. 数据转换:当需要将一种数据格式或协议转换为另一种格式或协议时,适配器模式可以用于数据转换和兼容性处理。

  6. 统一接口:当你希望统一不同类或组件的接口,以便它们可以以相同的方式被客户端代码调用时,适配器模式可以提供一个统一的接口。

总之,适配器模式适用于各种情况,其中不同组件或类的接口不兼容,但需要协同工作或被统一。它有助于减少系统中的代码耦合,并提高代码的可维护性和扩展性。

角色

适配器模式通常涉及以下几个角色:

  1. 目标接口(Target):这是客户端代码所期望的接口。客户端代码通过与目标接口交互来完成特定任务。
  2. 适配器(Adapter):适配器是一个中间类,它实现了目标接口,并持有一个对被适配者的引用。适配器的主要任务是将客户端代码的请求转发给被适配者,从而使被适配者的接口与目标接口兼容。
  3. 被适配者(Adaptee):被适配者是需要被适配的类或接口,它具有客户端代码不期望的接口。适配器将被适配者的接口转化为目标接口。
实现
cpp 复制代码
// 适配器模式
// 时间:2023-10-29
// 作者:@conceal
#include <iostream>
#include <string>
using namespace std;

// 适配者类
class Adaptee
{
public:
    void specificRequest()
    {
        cout << "适配者类的特殊请求" << endl;
    }
};

// 目标抽象类
class Target
{
public:
    virtual void request() = 0;
};

// 适配器类
class Adapter : public Target
{
public:
    Adapter(Adaptee *adaptee)
    {
        this->adaptee = adaptee;
    }
    void request()
    {
        adaptee->specificRequest();
    }

private:
    Adaptee *adaptee;
};

int main()
{
    Adaptee *adaptee = new Adaptee();
    Target *target = new Adapter(adaptee);
    target->request();
    return 0;
}

输出

shell 复制代码
适配者类的特殊请求
相关推荐
王老师青少年编程43 分钟前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组
凡人叶枫1 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
CSDN_RTKLIB1 小时前
使用三方库头文件未使用导出符号情景
c++
rainbow68893 小时前
Linux文件描述符与重定向原理
c++
CodeSheep程序羊3 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
编程小白20264 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
.小墨迹4 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
历程里程碑5 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴5 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6735 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密