設計模式之代理模式(C++實現)

代理模式:爲其他對象提供代理以控制對這個對象的訪問。

代理模式運用的場合:

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

2、虛擬代理。根據需要創建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象。

3、安全代理。用來控制真實對象訪問時的權限。

4、智能指引。指當調用真實對象時,代理處理另外一些事。

例如下例,真實對象Pursuit要給蠢蠢送禮物,但他不認識蠢蠢,只能通過代理Proxy來送禮物

/******************************************************************main.cpp************************************************************/

#include "Proxy.h"

int main()
{
	Proxy * proxy = new Proxy("蠢蠢");
	proxy->GiveChocolate();
	proxy->GiveDolls();
	proxy->GiveFlowers();
	getchar();
	return 0;
}

/******************************************************************Givegift.h************************************************************/

#include <iostream>
#include <string>
#pragma once
using namespace std;
class Givegift
{
public:
	virtual void  GiveChocolate()=0;
	virtual void  GiveDolls()=0;
	virtual void  GiveFlowers()=0;
};


/******************************************************************Pursuit.h************************************************************/

#include "Givegift.h"

class Pursuit:public Givegift
{
	string girlname;
public:
	Pursuit(string name)
	{
		girlname = name;
	}
	void virtual GiveChocolate()
	{
		cout<<"給"<<girlname<<"巧克力"<<endl;
	};
	void virtual GiveDolls()
	{
		cout<<"給"<<girlname<<"玩具"<<endl;
	};
	void virtual GiveFlowers()
	{
		cout<<"給"<<girlname<<"花"<<endl;
	};
};


/******************************************************************Proxy.h************************************************************/

#include "Givegift.h"
#include "Pursuit.h"

class Proxy:public Givegift
{
	Pursuit *myPursuit;
public:
	Proxy(string name)
	{
		myPursuit = new Pursuit(name);
	}
	void GiveChocolate()
	{
		myPursuit->GiveChocolate();
	};
	void GiveDolls()
	{
		myPursuit->GiveDolls();
	};
	void GiveFlowers()
	{
		myPursuit->GiveFlowers();
	};
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章