我与C++设计模式(十一)——代理模式

proxy这种关系在生活中很常见,就是叫别人帮你去完成你并不方便自己直接完成或者说别人完成优于自己完成的事情。proxy模式就是解决或者说优化程序设计中遇到的类似情况。

其实我看完代理模式后,总是在想,这和adapter差别到底在哪里?先看看两者的UML图:

proxy:



从UML图上,我看到了proxy中有两次继承,但是当作者真正给出代码后,我没看到我想看到的,我只是觉得这段代码好熟悉。这跟Adapter感觉好相似啊。但是后来的学习我明白了,之前我实现的Adapter并不是完善,我会在不久去重新看看的,在这儿我推荐一篇文章,点这儿,该文章中,对区分这些类似的封装模式有一定的帮助。

下面是我实现的代码:

#ifndef _PROXY_H__
#define _PROXY_H__

class subject
{
        public:
                virtual ~subject();
                virtual void request() = 0;

        protected:
                subject();
};

class concrete_subject:public subject
{
        public:
                concrete_subject();
                ~concrete_subject();
                void request();
};

class proxy
{
        public:
                proxy();
                proxy(subject *);
                ~proxy();
                void request();

        private:
                subject * _p_sub;
};
#endif

//proxy.cpp

#include "proxy.h"
#include <iostream>
using namespace std;

subject::subject()
{
}

subject::~subject()
{
}


concrete_subject::concrete_subject()
{
}

concrete_subject::~concrete_subject()
{
}

void concrete_subject::request()
{
        cout<<"REQUEST FROM CONCRETE_SUBJECT"<<endl;
}


proxy::proxy()
        :_p_sub(0)
{
}

proxy::proxy(subject *p_sub)
        :_p_sub(p_sub)
{
}

proxy::~proxy()
{
        delete _p_sub;
}

void proxy::request()
{
        cout<<"REQUEST FORM PROXY"<<endl;
        _p_sub->request();
}

//main.cpp

#include "proxy.h"

int main(int argc,char **argv)
{
        subject *p_sub = new concrete_subject();
        proxy * p_pro = new proxy(p_sub);
        p_pro->request();
        return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值