代理模式,就是相同的两个类,一个类做另一个类的代理人。出头露面的是第一个人,实际做事情的是第二人。
但是第一个人怎么知道第二个人能做那些事情。就继承了同一个父类。
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;
- }