13.代理模式(增加一层代理层)

动机
在面向对象系统中,有些对象由于某种原因(如对象创建开销很大,或者某些操作需要安全控制,或需要进程外的访问等),直接访问会给使用者、或系统结构带来很多麻烦。
如何在不失去透明操作对象的同时管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。
模式定义
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。
结构
image
总结
不直接使用,增加一层代理;分布式大量使用代理模式
image

例子:

class ISubject{
public:
    virtual void process();
};

class RealSubject: public ISubject{
public:
    virtual void process(){ .... }
};

class ClientApp{
    ISubject* sub;
public:
    ClientApp(){ sub = new RealSubject(); }
    void DoTask(){
        //...
        sub->process();
        //....
    }
};


改进:

class ISubject{
public:
    virtual void process();
};

//Proxy的设计
class SubjectProxy: public ISubject{
public:
    virtual void process(){
        //对RealSubject的一种间接访问
        //....
    }
};

class ClientApp{
    ISubject* sub;
public:
    ClientApp(){ sub = new SubjectProxy(); }
    void DoTask(){
        //...
        sub->process();
        //....
    }
};

image
image

posted @ 2021-06-05 11:16  点|滴  阅读(7)  评论(0)    收藏  举报