06_23 种设计模式之《适配器模式》

文章目录

一、适配器模式基础知识

适配器模式定义:将一个类的接口转换成客户希望的另一个接

口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可

以一起工作。

Client:客户端,调用自已需要的领域接口 Target。

Target:定义客户端需要的跟特定领域的相关接口。

Adaptee:已经存在的接口,通常能满足客户端的功能要求,但

是接口与客户端要求的特定领域接口不一致,需要被适配。

Adapter:适配器,把 Adaptee 适配成为 Client 需要的 Target。

1、适配器模式:作为两个不兼容的接口之间的桥梁。它属于结构体

型模式,结合两个独立接口的功能。

2、主要解决:解决在软件系统当中,将一些"现存的对象"放到新

的环境当中,而新环境要求的接口是现对象不能满足的。

3、优点:可以让任何两个没有关联的类一起执行;为了提高类的利

用;增加类的透明度;灵活性更好。

4、缺点:适配器使用过多,让整个系统非常零乱,不容易整体进行

把控

实例

cpp 复制代码
#include <iostream>
using namespace std;

// 我们要定义客户端使用的接口,与特殊领域相关的
class Target {
public:
    virtual void RequestFunc() = 0;
    virtual ~Target() {
        cout << "调用Target类析构函数." << endl;
    }
};

// 已经存在的接口,这个接口需要被适配
class Adaptee {
public:
    void SpecificRequestFunc() {
        cout << "\nAadaptee类特殊请求处理实现模块.\n" << endl;
    }
    ~Adaptee() {
        cout << "调用Adaptee类析构函数." << endl;
    }
};

// 适配器,将现在接口转为需要的接口
class Apapter :public Target {
private:
    Adaptee* adaptee;

public:
    Apapter() {
        adaptee = new Adaptee();
        cout << "调用Apapter类构造函数." << endl;
    }

public:
    virtual void RequestFunc() { // 可以转调已经实现的方法,进行适配

        adaptee->SpecificRequestFunc();
    }

    virtual ~Apapter() {
        if (adaptee != NULL)
        {
            delete adaptee;
            adaptee = NULL;
        }
        cout << "调用Apapter类析构函数." << endl;
    }   
};


int main()
{
    // 创建客户端需要调用的接口对象
    Target* target = new Apapter();

    target->RequestFunc(); // 请求处理操作

    if (target != NULL)
    {
        delete target;
        target = NULL;
    }
    
    return 0;
}
相关推荐
qq_4798754314 分钟前
Linux time function in C/C++【2】
linux·c语言·c++
一个不知名程序员www1 小时前
算法学习入门---前缀和(C++)
c++·算法
ol木子李lo1 小时前
Doxygen入门指南:从注释到自动文档
c语言·c++·windows·编辑器·visual studio code·visual studio·doxygen
m0_748248021 小时前
Spring设计模式刨根问底
java·spring·设计模式
夜晚中的人海2 小时前
【C++】分治-快速排序算法习题
开发语言·c++·排序算法
Aevget3 小时前
QtitanNavigation助力能源数字化转型:打造清晰可控的系统导航体验
c++·qt·嵌入式·能源·界面控件·ui开发
不要额外加糖3 小时前
tql,寥寥几行,实现无队列无感刷新
前端·javascript·设计模式
ACGkaka_3 小时前
设计模式学习(十二)状态模式
学习·设计模式·状态模式
百锦再3 小时前
第6章 结构体与方法
android·java·c++·python·rust·go
埃博拉酱3 小时前
将你的C++库发布到NuGet全攻略
c++·nuget