现在的位置: 首页 > 综合 > 正文

c++设计模式—代理模式

2018年03月21日 ⁄ 综合 ⁄ 共 2246字 ⁄ 字号 评论关闭

代理模式:

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

 

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

RealSubject类,定义Proxy所代表的真实实体。

Proxy类,保存一个引用使用代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以代替实体。

 

代理模式代码:

 

#include<iostream>

usingnamespace std;

 

classSubject

{

public:

       virtual void Request()=0;

};

 

 

classRealSubject:virtual public Subject

{

public:

       void Request()

       {

              cout<<"真实实体请求!"<<endl;

       }

};

 

classProxy:virtual public Subject

{

public:

       Proxy():realsubject(NULL){}

       void Request()

       {

              if(realsubject==NULL)

              {

                     realsubject=newRealSubject();

              }

              realsubject->Request();

       }

       ~Proxy()

       {

              if(realsubject!=NULL)

                     delete realsubject;

       }

private:

       RealSubject *realsubject;

};

 

intmain()

{

       Proxy *pProxy=new Proxy();

       pProxy->Request();

 

       delete pProxy;

       return 0;

}

 

代理模式的应用:

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

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

3)  安全代理:用来控制真实对象访问时的权限。

 

 

实例代码:

 

#include<iostream>

#include<string>

usingnamespace std;

 

 

classSend

{

public:

       virtual void Request()=0;

};

 

classSender:virtual public Send                                      //寄信人类(实体类)

{

public:

       Sender():name(NULL),address(NULL){}

       Sender(string name,stringaddress):name(name),address(address){}

       void Request()

       {

              cout<<"此信件寄往:"<<address<<"—"<<"收件人:"<<name<<endl;

       }

private:

       string name;

       string address;

};

 

classSendProxy:virtual public Send                                   //快递公司(代理类)

{

public:

       SendProxy():pSender(NULL){}

       void Request()

       {

              cout<<"欢迎使用申通快递!"<<endl;

              if(pSender==NULL)

              {

                     string name,address;

                     cout<<"请输入您要寄往的地址和收件人姓名:"<<endl;

                     cin>>address>>name;

                     pSender=newSender(name,address);

              }

 

              pSender->Request();

              cout<<"很高兴为您服务! 即将为您派送"<<endl;

             

       }

       ~SendProxy()

       {

              if(pSender!=NULL)

                     delete pSender;

       }

private:

       Sender * pSender;

};

 

 

intmain()

{

       SendProxy *pSendProxy=new SendProxy();

       pSendProxy->Request();

       delete pSendProxy;

 

       return 0;

}

 

抱歉!评论已关闭.