设计模式之代理模式学习

来源:互联网 发布:淘宝上的自抽号怎么买 编辑:程序博客网 时间:2024/06/06 08:40

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

 

     Subject类,被代理的类。定义了RealSubjectProxy的接口。这样代理类就可以执行被代理的所有行为。RealSubject定义Proxy所代理的真实实体。Proxy类,代理类,与RealSubject有相同的接口。

#include<iostream>using namespace std;class Subject{public:   Subject()   {         }      virtual void function1()=0;      virtual void function2()=0;      virtual void function3()=0;      };class RealSubject:public Subject{public:   virtual void function1()   {    //function1的功能     std::cout<<"ReadSubject function1"<<endl;      }      virtual void function2()      {      //function2的功能       std::cout<<"ReadSubject function2"<<endl;      }      virtual void function3()      {      //function3的功能       std::cout<<"ReadSubject function3"<<endl;      }};class Proxy:public Subject{public:    RealSubject *rs;public:    Proxy()   {    rs=new RealSubject;      }      virtual void function1()      {        rs->function1();      }      virtual void function2()      {        rs->function2();      }      virtual void function3()      {        rs->function3();      }} ;int main(int argc,char**argv){Proxy proxy;proxy.function1();proxy.function2();proxy.function3();return 0;}


 

     通俗的说就是在访问对象时引入一定程度的间接性,正是有了这种间接,可以附加多种用途。

     一般有以下几种应用:

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

     二:虚拟代理,根据需要创建开销很大的对象,通过它来存在实例化时间很长的真实对象。

     三:安全代理,控制真是访问对象的权限。

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

     现在看来代理模式也并不是多么新奇。很早之前就有接触,以前刚学习C++的时候接触过,《C++大学教程》里有介绍。记得当时是为了隐藏类的成员变量,因为当类创建好后,虽然类的实现可以以dll的形式提供,但是类的头文件还是必须提供给客户的,这就造成某些信息的泄漏。如成员变量。引入了代理后,仅仅只需要将代理的头文件暴露给客户,实现了隐藏被代理类的目的。