您的位置:首页 > 编程语言 > C语言/C++

02.代理模式 【PROXY PATTERN】

2014-08-14 23:43 381 查看
推荐文章:http://www.jellythink.com/archives/301

类图:



类解读:

1、Subject:定义了通用的接口

2、Proxy:负责和外部交互的实体类。

3、RealSubject:负责真正干活的实体类,Proxy会将具体的工作交予它。

4、Client:调用proxy部分(不一定是类),他不管活谁完成或怎样完成,他只会寻找Proxy并把任务交予它将其完成。

原理解读:

代理模式主要使用了多态,真正干活的类是被代理的类,而代理类只负责中间衔接工作。就像公司中接货的人是销售,真正干活的人是下边那忙程序员,销售会不会干实际的活,没有关系,只需要让你没有关系,只要客户满意就OK了,你管我怎么干。

#include <iostream>

using namespace std;

 

#define SAFE_DELETE(p) if (p) { delete p; p = NULL;}

 

class CSubject

{

public:

    CSubject(){};

    virtual ~CSubject(){}

 

    virtual void Request() = 0;

};

 

class CRealSubject : public CSubject

{

public:

    CRealSubject(){}

    ~CRealSubject(){}

 

    void Request()

    {

        cout<<"CRealSubject Request"<<endl;

    }

};

 

class CProxy : public CSubject

{

public:

    CProxy() : m_pRealSubject(NULL){}

    ~CProxy()

    {

        SAFE_DELETE(m_pRealSubject);

    }

 

    void Request()

    {

        if (NULL == m_pRealSubject)

        {

            m_pRealSubject = new CRealSubject();

        }

        cout<<"CProxy Request"<<endl;

        m_pRealSubject->Request();

    }

 

private:

    CRealSubject *m_pRealSubject;

};

 

int main()

{

    CSubject *pSubject = new CProxy();

    pSubject->Request();

    SAFE_DELETE(pSubject);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息