设计模式之适配器模式 -- 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 复制代码
适配者类的特殊请求
相关推荐
于小猿Sup6 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
小小编程路9 小时前
C++ 多线程与并发
java·jvm·c++
程序leo源10 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
zh_xuan11 小时前
解决VS Code 控制台中文乱码
c++·vscode·乱码
郭涤生11 小时前
飞凌 RK3588 开发板同显 / 异显模式切换
c++·rk3588
计算机安禾11 小时前
【c++面向对象编程】第38篇:设计原则(二):里氏替换、接口隔离与依赖倒置
开发语言·c++
code_whiter11 小时前
C++1进阶(继承)
开发语言·c++
智者知已应修善业12 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业12 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机
咩咦12 小时前
C++学习笔记20:日期类比较运算符重载
c++·学习笔记·类和对象·运算符重载·比较运算符·日期类