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

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

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

proxy:

我与C++设计模式(十一)——代理模式_第1张图片

我与C++设计模式(十一)——代理模式_第2张图片

从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 
using namespace std;

subject::subject()
{
}

subject::~subject()
{
}


concrete_subject::concrete_subject()
{
}

concrete_subject::~concrete_subject()
{
}

void concrete_subject::request()
{
        cout<<"REQUEST FROM CONCRETE_SUBJECT"<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;
}


你可能感兴趣的:(设计模式,C++,设计模式,proxy)