Skip to content

Latest commit

 

History

History
75 lines (58 loc) · 1.31 KB

13.代理模式.md

File metadata and controls

75 lines (58 loc) · 1.31 KB

代理模式 Proxy

动机

在面向对象系统中,有些对象由于某种原因(比如对象创建的开销大,或某些操作需要安全控制,或需要进程外的访问等)。直接访问会给使用者或系统结构带来麻烦。

模式定义

为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。

代码

原始设计

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

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

class ClientApp{
    ISubject* subject;
public:
    ClientApp(){
        subject = new RealSubject();    // 可能拿不到 RealSubject
    }

    void doTask(){
        // ...
        subject->process();
        // ...
    }
};

重构设计

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

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

class ClientApp{
    ISubject* subject;
public:
    ClientApp(){
        subject = new SubjectProxy();   // todo: 用工厂方式包装
    }

    void doTask(){
        // ...
        subject->process();
        // ...
    }
};

题目