02.代理模式 【PROXY PATTERN】

来源:互联网 发布:深圳科列 知乎 编辑:程序博客网 时间:2024/06/03 18:15

推荐文章: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);
}


0 0
原创粉丝点击