设计模式(C++版)之(proxy)代理模式

结构性模式--代理(proxy)模式

一,proxy原理解析:

代理模式:为一个对象提供一种代理机制,用这个代理来控制对这个对象的访问

有四种常用的情况:

    ①远程代理也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实(例如WEBSERVICES)

    ②虚拟代理根据需要创建开销很大的对象。如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。(例如网页中的图片,通过虚拟代理来替代真实的图片,此时代理存储真实图片的路径和尺寸)。

    ③安全代理用来控制真实对象访问时的权限

    ④智能指引指当调用真实对象时,代理处理另外一些事。

实现要点:
    ①抽象基类:Subject:定义了Proxy和RealSubject的公有接口。

    ②两个子类RealSubject类和Proxy类都继承自Subject,这样保证了两个的接口都是一致的。

    ③Proxy类和RealSuject类关联,Proxy类要保存RealSuject类的一个引用或者指针,以便对实体进行访问。

   如图:Client不跟RealSubject交互,而是由Proxy控制对RealSubject的访问。


二,c++代码实现:

#include <iostream>
using namespace std;

//
class CSubject
{
    public:
    CSubject() {}
    ~CSubject() {}

    void virtual request() {};//interface
};

//
class CrealSubject: public CSubject
{
    public:
    CrealSubject():CSubject() {}
    ~CrealSubject() {}

    void request()
    {
        cout<<"CrealSubject request..."<<endl;
    }
};
//
class CProxy: public CSubject
{
    public:
        CProxy():CSubject(), rb(0) {}
        ~CProxy() {delete rb;}

        void request()
        {
            if(rb == NULL)
            {
                rb = new CrealSubject();
            }
            //
            rb->request();
        }
    private:
        CrealSubject* rb;
};
//


int main()
{
    CSubject *sp = new CProxy();
    sp->request();

    delete sp;
    return 0;
}

:推荐可以参考:http://blog.csdn.net/wuzhekai1985/article/details/6669219

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。