1. 程式人生 > >設計模式之代理模式 c++實現以及詳解

設計模式之代理模式 c++實現以及詳解

proxy模式

<1> 作用:
為其他物件提供一種代理以控制對這個物件的訪問。 <2> 代理模式的應用場景
如果已有的方法在使用的時候需要對原有的方法進行改進,此時有兩種辦法:
1、修改原有的方法來適應。這樣違反了“對擴充套件開放,對修改關閉”的原則。
2、就是採用一個代理類呼叫原有的方法,且對產生的結果進行控制。這種方法就是代理模式。
使用代理模式,可以將功能劃分的更加清晰,有助於後期維護! <3> 結構圖


代理類,含有一個指向RealSubject物件的指標

<4>

/******************************************
*設計模式之代理模式                       *
*小明同學讓大黑同學替他跟一暗戀女生表白   *
*by hnust_xiehonghao     2014.5.22 14:16  *
******************************************/
#include <iostream>
using namespace std;

class Person  //Subject
{
public:
	virtual func()
	{
		cout << "Person" << endl;
	}
};

class XiaoMing :public Person // RealSubject
{
public:
     virtual func()
	 {
		 cout << "XiaoMing love you!" << endl;
	 }
};

class DaHei : public Person //proxy
{
	XiaoMing XM;
public:
	virtual func()
	{
		 cout << "I am DaHei ,xiaoming Let Me tell you something :" << endl;
		 XM.func();
	}
};

int main()
{
    DaHei DH;
	//大黑對女孩說
	DH.func();
	return 0;
}


參考大話設計模式

<5>

代理模式主要分為四類

遠端代理,虛代理,保護代理和智慧引用。 其它還有挺多不常用的代理模式

1遠端代理

負責對請求及其引數進行編碼,並向不同地址空間中的實體傳送已編碼的請求; 

呼叫代理的方法,會被代理利用網路轉發到遠端執行,並且結果會通過網路返回給代理,再由代理將結果轉給客戶。

2虛代理

可以快取實體的附加資訊,以便延遲對它的訪問;

直到我們真正需要一個物件的時候才建立它,比如當載入圖片時,我們開啟不同的相簿,才會去顯示所選相簿的圖片。

當物件在建立前和建立中時,由虛擬代理來扮演物件的替身。物件建立後,代理就會將請求直接委託給物件。

瀏覽器就使用了代理


詳細瞭解請參考http://blog.csdn.net/shuangde800/article/details/10324991


3保護代理

新增資訊 檢查呼叫者是否具有實現一個請求所必須的訪問許可權。

 4智慧引用代理

當一個物件被引用時,提供一些額外的操作,例如將物件被呼叫的次數記錄下來等。

proxy模式不一定要保持介面的一致性。只要能夠實現間接控制,有時候損及一些透明性是可以接受的