设计模式之适配器模式 -- 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 复制代码
适配者类的特殊请求
相关推荐
cdut_suye5 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
波音彬要多做29 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
捕鲸叉30 分钟前
C++软件设计模式之外观(Facade)模式
c++·设计模式·外观模式
小小小妮子~1 小时前
框架专题:设计模式
设计模式·框架
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
只做开心事2 小时前
C++之红黑树模拟实现
开发语言·c++
程序员老冯头3 小时前
第十五章 C++ 数组
开发语言·c++·算法
程序猿会指北4 小时前
【鸿蒙(HarmonyOS)性能优化指南】启动分析工具Launch Profiler
c++·性能优化·harmonyos·openharmony·arkui·启动优化·鸿蒙开发
无 证明8 小时前
new 分配空间;引用
数据结构·c++
Damon_X9 小时前
桥接模式(Bridge Pattern)
设计模式·桥接模式