代理模式简介
代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一个代理对象,用于控制对原始对象的访问。代理对象可以在不改变原始对象的情况下,添加额外的功能或者限制对原始对象的访问。
代理模式结构
Subject(主题):定义了RealSubject和Proxy的公共接口。
RealSubject(真实主题):定义了Proxy所代表的真实对象。
Proxy(代理):保存一个引用,该引用指向RealSubject对象。Proxy可以在访问RealSubject之前或之后执行某些操作。
代理模式代码
#include <iostream>
#include <memory>
// 主题接口
class Subject
{
public:
virtual void request() = 0;
virtual ~Subject()
{}
};
// 真实主题
class RealSubject : public Subject
{
public:
void request() override
{
std::cout << "真实主题处理请求。" << std::endl;
}
};
// 代理
class Proxy : public Subject
{
private:
// 被代理者的访问指针
std::shared_ptr<RealSubject> realSubject;
bool _is_begin = true ;
public:
// std::make_shared 的作用类似于 std::shared_ptr
Proxy() : realSubject( std::make_shared<RealSubject>() )
{}
void request() override
{
if(_is_begin == true)
{
std::cout << "代理处理请求。" << std::endl;
// 在转发请求给真实主题之前可以执行一些额外操作
realSubject->request();
}
}
// 展示代理人是否允许访问真实主题, 可以后续添加控制开关
void isBgegin()
{
return _is_begin ;
}
};
// 客户端
int main()
{
std::shared_ptr<Subject> proxy = std::make_shared<Proxy>();
proxy->request();
return 0;
}