用代码和UML图化解设计模式之《代理模式》
代理模式,就是相同的两个类,一个类做另一个类的代理人。出头露面的是第一个人,实际做事情的是第二人。
但是第一个人怎么知道第二个人能做那些事情。就继承了同一个父类。
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;}
输出结果:
更多文章,欢迎访问:
http://blog.csdn.net/wallwind