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;
}
相关推荐
小欣加油1 小时前
leetcode 1018 可被5整除的二进制前缀
数据结构·c++·算法·leetcode·职场和发展
7***n751 小时前
前端设计模式详解
前端·设计模式·状态模式
兵bing2 小时前
设计模式-装饰器模式
设计模式·装饰器模式
玖剹3 小时前
递归练习题(四)
c语言·数据结构·c++·算法·leetcode·深度优先·深度优先遍历
西部秋虫3 小时前
YOLO 训练车牌定位模型 + OpenCV C++ 部署完整步骤
c++·python·yolo·车牌识别
雨中飘荡的记忆3 小时前
深入理解设计模式之适配器模式
java·设计模式
雨中飘荡的记忆4 小时前
深入理解设计模式之装饰者模式
java·设计模式
老鼠只爱大米4 小时前
Java设计模式之外观模式(Facade)详解
java·设计模式·外观模式·facade·java设计模式
qq_172805594 小时前
Go 语言结构型设计模式深度解析
开发语言·设计模式·golang
雾岛听蓝5 小时前
C++ 类和对象(一):从概念到实践,吃透类的核心基础
开发语言·c++·经验分享·笔记