设计模式之适配器模式 -- 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 复制代码
适配者类的特殊请求
相关推荐
玖笙&1 天前
✨WPF编程进阶【7.1】动画基础
c++·c#·wpf·visual studio
QT 小鲜肉1 天前
【C++基础与提高】第一章:走进C++的世界——从零开始的编程之旅
开发语言·c++·笔记·qt
@木辛梓1 天前
模版 c++
开发语言·c++
oioihoii1 天前
C++中的线程同步机制浅析
开发语言·c++
guangzan1 天前
常用设计模式:代理模式
设计模式
枫叶丹41 天前
【Qt开发】布局管理器(五)-> QSpacerItem 控件
开发语言·数据库·c++·qt
月下倩影时1 天前
ROS1基础入门:从零搭建机器人通信系统(Python/C++)
c++·python·机器人
_OP_CHEN1 天前
C++进阶:(八)基于红黑树泛型封装实现 map 与 set 容器
开发语言·c++·stl·set·map·红黑树·泛型编程
无敌最俊朗@1 天前
C++线程中detach和join的注意点
c++
努力努力再努力wz1 天前
【Linux进阶系列】:线程(下)
linux·运维·服务器·c语言·数据结构·c++·算法