[Structural Pattern] Understanding of the Agent Pattern



head File
//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

accomplish
#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);
    }
}

client
#include "ProxyPattern.h"


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

void main()
{
    ProxyPattern_Test();
}

operation result

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326863162&siteId=291194637