1. 程式人生 > >用程式碼和UML圖化解設計模式之《代理模式》

用程式碼和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;
}

輸出結果:

更多文章,歡迎訪問: