[结构型模式] 代理模式的理解



头文件
//ProxyPattern.h

#ifndef PROXY_PATTERN_H
#define PROXY_PATTERN_H

#include <Windows.h>
#include <iostream>
using namespace std;

namespace ProxyPattern
{
#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();
        virtual ~CRealSubject();

        virtual void Request();
    };

    //////////////////////////////////////////////////////////////////////////
    class CProxy : public CSubject
    {
    public:
        CProxy();
        virtual ~CProxy();

        virtual void Request();

    private:
        CRealSubject* m_pRealSubject;
    };

    //////////////////////////////////////////////////////////////////////////
    void ProxyPattern_Test();
}

#endif

实现
#include "ProxyPattern.h"

namespace ProxyPattern
{
    //////////////////////////////////////////////////////////////////////////
    CSubject::CSubject()
    {}

    CSubject::~CSubject()
    {}

    void CSubject::Request()
    {}

    //////////////////////////////////////////////////////////////////////////
    CRealSubject::CRealSubject(){}
    CRealSubject::~CRealSubject(){}

    void CRealSubject::Request()
    {
        cout<<"CRealSubject Request"<<endl;
    }

    //////////////////////////////////////////////////////////////////////////
    CProxy::CProxy()
        : m_pRealSubject(NULL)
    {}

    CProxy::~CProxy()
    {
        SAFE_DELETE(m_pRealSubject);
    }

    void CProxy::Request()
    {
        if (NULL == m_pRealSubject)
        {
            m_pRealSubject = new CRealSubject();
        }
        cout<<"CProxy Request"<<endl;
        m_pRealSubject->Request();
    }

    ///////////////////////////////////////////////////////////////////////////
    void ProxyPattern_Test()
    {
        CSubject *pSubject = new CProxy();
        pSubject->Request();
        SAFE_DELETE(pSubject);
    }
}

客户端
#include "ProxyPattern.h"


#include <iostream>
using namespace std;
using namespace ProxyPattern;

void main()
{
    ProxyPattern_Test();
}

运行结果

猜你喜欢

转载自jacky-dai.iteye.com/blog/2302930