設計模式學習4--代理模式

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

class SchoolGirl
{
public:
	SchoolGirl(string name){m_name = name;}

	string m_name;
};
//interface
class Givegift
{
	virtual void GiveDolls() = 0;
	virtual void GiveFlowers() = 0;
	virtual void GiveChocolate() = 0;
};
class Persuit : public Givegift
{
public:
	Persuit(SchoolGirl* girl){m_girl = girl;}
	virtual void GiveDolls()
	{
		cout<<"送洋娃娃給"<<m_girl->m_name<<endl;
	}
	virtual void GiveFlowers()
	{
		cout<<"送鮮花給"<<m_girl->m_name<<endl;
	}
	virtual void GiveChocolate()
	{
		cout<<"送巧克力給"<<m_girl->m_name<<endl;
	}
private:
	SchoolGirl *m_girl;
};
class Proxy : public Givegift
{
public:
	Proxy(SchoolGirl *mm){gg = new Persuit(mm);}
	virtual void GiveDolls(){gg->GiveDolls();}
	virtual void GiveFlowers(){gg->GiveFlowers();}
	virtual void GiveChocolate(){gg->GiveChocolate();}
private:
	Persuit *gg;
};

int _tmain(int argc, _TCHAR* argv[])
{
	SchoolGirl *jiaojiao = new SchoolGirl("李嬌嬌");
	Proxy *daili = new Proxy(jiaojiao); 
	daili->GiveDolls();
	daili->GiveFlowers();
	daili->GiveChocolate();
	return 0;
}

適用場合:

1.遠程代理,也就是爲一個對象在不同地址空間提供局部代表,這樣可以隱藏一個對象存在於不同地址空間的事實(WebService)

2.虛擬代理,是根據需要創建開銷很大的對象,通過他來存放實例化需要很長時間的真實對象,以達到性能最優化(瀏覽器優化下載)。

3.安全代理,用來控制真實對象訪問時的權限;

4.智能指引,指當調用真實對象時代理處理另外一些事(引用計數器)。

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章