設計模式之代理模式 c++實現以及詳解
阿新 • • 發佈:2019-01-22
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模式不一定要保持介面的一致性。只要能夠實現間接控制,有時候損及一些透明性是可以接受的