头文件
//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(); }
运行结果