16.8:C++设计模式和装饰器模式的结合!(课程共7300字,4段代码举例)

本文详细介绍了C++中装饰器模式的使用,通过四个实例——文件读写加密解密、窗口自定义样式、网络请求缓存和日志记录——阐述了如何利用装饰器模式动态扩展对象功能,提高代码灵活性和可维护性。同时,文章也提醒了在使用装饰器模式时需要注意的性能和设计原则问题。
摘要由CSDN通过智能技术生成

例子1:使用装饰器模式实现文件读写的加密和解密
例子2:使用装饰器模式实现窗口的自定义样式
例子3:使用装饰器模式实现网络请求的缓存
例子4:使用装饰器模式实现日志记录

例子3:使用装饰器模式实现网络请求的缓存

在这个例子中,我们将一个网络请求对象包装在一个缓存装饰器中,从而实现对网络请求结果的缓存。下面是代码实现:

#include <iostream>
#include <unordered_map>
using namespace std;

// 网络请求接口
class IRequest {
public:
    virtual string send() = 0;
};

// 网络请求实现类
class Request : public IRequest {
public:
    Request(const string& url) : m_url(url) {}
    virtual string send() override {
        // 发送网络请求
        return "Response from " + m_url;
    }
private:
    string m_url;
};

// 装饰器接口
class ICacheDecorator : public IRequest {};

// 缓存装饰器
class CacheDecorator : public ICacheDecorator {
public:
    CacheDecorator(IRequest* request) : m_request(request) {}
    virtual string send() override {
        if (m_cache.find(m_request->send()) != m_cache.end()) {
            return m_cache[m_request->send()];
        }
        string response = m_request->send();
        m_cache[response] = response;
        return response;
    }
private:
    IRequest* m_request;
    unordered_map<string, string> m_cache;
};

int main() {
    // 创建网络请求对象
    IRequest* request = new Request("https://www.example.com");
    // 创建缓存装饰器
    ICacheDecorator* cacheDecorator = new CacheDecorator(request);
    // 发送网络请求并缓存结果
    cout << cacheDecorator->send() << endl;
    // 再次发送网络请求并返回缓存结果
    cout << cacheDecorator->send() << endl;
    return 0;
}

例子4:使用装饰器模式实现日志记录

在这个例子中,我们将一个对象包装在一个日志记录装饰器中,从而实现对对象操作的日志记录。下面是代码实现:

🌷🌷🌷🌷课程概述(课程共7300字,4段代码举例)

🌷🌷🌷🌷例子1:使用装饰器模式实现文件读写的加密和解密

🌷🌷🌷🌷例子2:使用装饰器模式实现窗口的自定义样式

🌷🌷🌷🌷例子3:使用装饰器模式实现网络请求的缓存

🌷🌷🌷🌷例子4:使用装饰器模式实现日志记录

🌷🌷🌷🌷例子1:使用装饰器模式实现文件读写的加密和解密

🌷🌷🌷🌷例子2:使用装饰器模式实现窗口的自定义样式

🌷🌷🌷🌷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小兔子平安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值