用程式碼和UML圖化解設計模式之《代理模式》
阿新 • • 發佈:2019-01-05
代理模式,就是相同的兩個類,一個類做另一個類的代理人。出頭露面的是第一個人,實際做事情的是第二人。
但是第一個人怎麼知道第二個人能做那些事情。就繼承了同一個父類。
CMon類代理他所有女兒的事情。 而不用他們女兒親自出馬,但是呢實際做事情的還是他們女兒。
下面上程式碼
// Proxy.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> using namespace std; class IWomen { public: virtual void study() =0; virtual void sleep() =0; }; class CDaughter:public IWomen { public: CDaughter(){} ~CDaughter(){} public: void study() { cout<<"daughter is studying"<<endl; } void sleep() { cout<<"daughter is sleeping"<<endl; } }; class CMon:public IWomen { public: //專門做女兒的代理人 CMon(){ m_woman = new CDaughter(); } //做任何女人的代理人 CMon(IWomen* woman) :m_woman(woman) { } ~CMon(){ delete m_woman; } void study() { m_woman->study(); } void sleep() { m_woman->sleep(); } private: IWomen *m_woman; }; //第二個女兒 class CSecDau:public IWomen { public: CSecDau(){} ~CSecDau(){} public: void study() { cout<<"the second daughter is studying"<<endl; } void sleep() { cout<<"the second daughter is sleeping"<<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { CMon* mon = new CMon; mon->sleep(); mon->study(); mon =new CMon(new CSecDau()); mon->sleep(); mon->study(); return 0; }
輸出結果:
更多文章,歡迎訪問: