C++代理模式

代理模式是一种结构型设计模式,用于在不修改原有类代码的情况下,通过创建与真实对象接口相同的代理类来控制对原对象的访问并添加额外的行为。代理类在调用真实对象的方法前后可以进行额外的处理,提供了一种灵活的方式来扩展对象的功能。
摘要由CSDN通过智能技术生成
/**
    《代理模式》
    代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 
    代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

    代理模式建议新建一个与原服务对象接口相同的代理类, 然后更新应用以将代理对象传递给所有原始对象客户端。 
    代理类接收到客户端请求后会创建实际的服务对象, 并将所有工作委派给它。

    如果需要在类的主要业务逻辑前后执行一些工作, 你无需修改类就能完成这项工作。 
    由于代理实现的接口与原类相同, 因此你可将其传递给任何一个使用实际服务对象的客户端。

    当你希望在无需修改客户代码的前提下于已有类的对象上增加额外行为时, 该模式是无可替代的。
 */

// 代理模式
#include <iostream>
#include <string>

// 真实的服务类接口
class ISubject
{
public:
    virtual void Request() = 0;
};

// 真实的服务类
class Subject : public ISubject
{
public:
    void Request() override
    {
        std::cout << "Subject: request." << std::endl;
    }
};


// 代理类——拥有和真实类同样的接口,所以要继承同样的接口
class Proxy : public ISubject
{
private:
    Subject *subject_;   // 因为要与真实服务类通信,所以使用组合

public:
    Proxy(Subject *subject) : subject_(new Subject(*subject))
    {

    }

    // 重写接口
    void Request() override
    {
        std::cout << "进行一些处理" << std::endl;
        this->subject_->Request();  // 处理完毕再调用真实的服务类函数
    }
};


int main()
{
    ISubject *isubject = new Proxy(nullptr);
    isubject->Request();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橙子砰砰枪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值