Proxy(代理)设计模式

来源:互联网 发布:365抽奖软件破解版 编辑:程序博客网 时间:2024/04/30 05:25

声明:本博文篇幅短,适合review。

一、概念

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

二、模式结构图

class Subject{public:virtual ~Subject();virtual void request() = 0;protected:Subject();};class RealSubject : public Subject{public:RealSubject();~RealSubject();void request(){cout<<"RealSubject request"<<endl;}};class Proxy : public Subject{public:Proxy();Proxy(Subject * sub){mSub = sub;}~Proxy(){delete mSub;}void request(){cout<<"Proxy request"<<endl;mSub->request();}private:Subject * mSub;};void main(){Subject * sub = new RealSubject();Proxy * p = new Proxy(sub);p->request();}

三、例子

class Browser{public:virtual ~Browser();virtual void open() = 0;protected:Browser();};class GoogleBrowser : public Browser{public:GoogleBrowser();~GoogleBrowser();void open(){cout<<"GoogleBrowser open"<<endl;}};class Shortcut : public Browser{public:Shortcut();Shortcut(Browser * brow){mBrow = brow;}~Shortcut(){delete mBrow;}void open(){cout<<"Shortcut open"<<endl;mBrow->open();}private:Browser * mBrow;};void main(){Shortcut * sc = new Shortcut(new GoogleBrowser());sc->open();}


四、优缺点

       1、优点

             a、扩展性高

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

             c、责任清晰。真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务

       2、缺点

             a、实现代理类也需要额外的工作,从而增加了系统的实现复杂度

             b、在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢

1 0
原创粉丝点击