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