例子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:使用装饰器模式实现日志记录
在这个例子中,我们将一个对象包装在一个日志记录装饰器中,从而实现对对象操作的日志记录。下面是代码实现: