用代码和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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值