码迷,mamicode.com
首页 > 编程语言 > 详细

8、[C++]代理模式

时间:2015-02-13 18:15:15      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

代理模式

代理模式: 为其他对象提供一种代理以控制对这个对象的访问.

情景:

1. 有人找公司老总, 但是老总很忙, 于是要找就先找老总的助理, 助理等老总不忙时, 再来告诉老总吧.

2. 想象一下古代大户人家的大小姐与仆人偷情, 有一天仆人想约大小姐出来赏月, 但仆人可能不方便直接见大小姐,  于是先告诉大小姐的丫鬟, 由丫鬟转告大小姐.

 

上面这两个情景, 助理和丫鬟都是担当着代理的这个角色(为其他对象提供一种代理以控制对这个对象的访问, 这里指老总和小姐).

 

技术分享

 

Subject: 抽象类, 定义了Proxy和RealSubject的共用接口.

RealSubject: 真实实体(老总/大小姐)

Proxy: 代理类, 维护一个RealSubject的引用使得代理可以访问实体.

 

#include <iostream>
using namespace std;

class Subject{
public:
    virtual void Request() = 0;
};

class RealSubject
    : public Subject {
public:
    void Request() {
        cout << "真实的请求" << endl;
    }
};

class Proxy
    : public Subject {
public:

    void Request() {
        if (m_realSubject == NULL) {
            m_realSubject = new RealSubject();
        }
        m_realSubject->Request();
    }

protected:
    RealSubject* m_realSubject;
};

int _tmain(int argc, _TCHAR* argv[]) {
    Proxy* proxy = new Proxy();
    proxy->Request();

    system("PAUSE");
    return 0;
}

 

这样, 我们在客户端中, 都是通过代理类来访问真实的实体, 在代理类中, 就可以控制对真实实体的访问.

应用

1. 远程代理, 也就是为一个对象在不同的地址空间提供局部代表, 这样可以隐藏一个对象存在不同地址空间的事实.

其实这个我不怎么懂, 我的想法是这样的, R3下没法直接调用R0的代码, 但是可以调用系统封装好的API, 系统的API来跳转到R3下去执行真实的代码.

 

2. 虚拟代理, 是根据需要创建开销很大的对象, 通过它来存放实例化需要很长时间的替补对象

像我们平时浏览网页时, 先看到文字, 而图片只是先看到个框框, 然后一张一张的下载, 那些未打开的图片框就是通过虚拟代理替代了真实的图片, 此时代理存储了真实的图片路径和尺寸.

 

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

 

4. 智能指引, 是指当调用真实的对象时, 代理处理另外一些事, 例如控制真实对象的引用次数, 当对象没有引用时, 就释放这个对象.

 

写在最后:....

好吧, 虽然代理模式是个很简单的模式, 但是具体在哪里用....我还真没搞清楚...请原谅我的无知...

8、[C++]代理模式

标签:

原文地址:http://www.cnblogs.com/hanxiao-martin/p/4290500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!