码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式(Proxy)

时间:2014-05-21 16:54:54      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:c++ 设计模式

  代理模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

优点:
代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。

应用场景:
  1. 远程代理。为一个不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可在不同的主机中。
  2. 虚拟代理。根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能的最优化,比如打开一个很大的HTML网页时。
  3. 安全代理。用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
  4. 智能指针。是指当调用真实的对象时,代理处理另外一些事。如计算真实对象的引用计数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。他们都是通过代理访问一个对象时附加一些内务处理。
bubuko.com,布布扣


Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。

代码:
//Proxy.h
#include "stdafx.h"
#include <iostream>
#include <memory>
using namespace std;

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

class RealSubject :public Subject
{
public :
        virtual void Request()
       {
              cout << "真实的操作:RealSubject" << endl;
       }
};

class Proxy :public Subject
{
private :
        shared_ptr <RealSubject > _pRealSubject;
public :
        virtual void Request()
       {
               if (_pRealSubject == NULL)
                     _pRealSubject = shared_ptr <RealSubject >(new RealSubject );
              cout << "可以做一些内务处理!" << endl;
              _pRealSubject->Request();
       }

};
// ProxyMethod.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Proxy.h"


int _tmain (int argc , _TCHAR * argv [])
{
        shared_ptr <Proxy > pProxy( new Proxy());
       pProxy->Request();

       getchar();
        return 0;
}
运行结果:
bubuko.com,布布扣

代理模式(Proxy),布布扣,bubuko.com

代理模式(Proxy)

标签:c++ 设计模式

原文地址:http://blog.csdn.net/wwwdongzi/article/details/26349749

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