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;
}
相关推荐
ragnwang15 分钟前
C++ Eigen常见的高级用法 [学习笔记]
c++·笔记·学习
lqqjuly3 小时前
特殊的“Undefined Reference xxx“编译错误
c语言·c++
冰红茶兑滴水4 小时前
云备份项目--工具类编写
linux·c++
刘好念4 小时前
[OpenGL]使用 Compute Shader 实现矩阵点乘
c++·计算机图形学·opengl·glsl
酒鬼猿4 小时前
C++进阶(二)--面向对象--继承
java·开发语言·c++
姚先生975 小时前
LeetCode 209. 长度最小的子数组 (C++实现)
c++·算法·leetcode
小王爱吃月亮糖6 小时前
QT开发【常用控件1】-Layouts & Spacers
开发语言·前端·c++·qt·visual studio
aworkholic6 小时前
opencv sdk for java中提示无stiching模块接口的问题
java·c++·opencv·jni·opencv4android·stiching
程序员老冯头6 小时前
第十六章 C++ 字符串
开发语言·c++
Xenia2236 小时前
复习篇~第二章程序设计基础
c++·算法