代理模式(Proxy): 為其他對象提供一種代理以控制對這個對象(被代理者,即本人)的訪問。
在C#中實現方法是使用介面interface定義需要的方法,而在C++中需要實現一個類作為介面使用,其中定義需要的方法。這樣對我話,本人並不需要參與其中的具體活動,而由代理人出面。用戶端(第三方)也不認識本人,達到代理的作用。
上面的意思是:使用一個類封裝需要的代理方法。
代理模式應用:
遠程建立,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在於不同地址空間的事實。【DP】
虛擬代理,是根據需要建立開銷很大的對象。通過它來存放執行個體化需要很長時間的真是對象,例如:開啟一個很大的HTML網頁,我們看到的圖片是一張下載後才能看到,而未開啟的圖片框, 就是通過虛擬代理來替代真實的圖片。此時代理儲存了真實圖片的路徑和尺寸。
安全代理,用來控制真時對象訪問時的許可權【DP】,一般用於對象應該有不同存取權限的時候。
智能指引,是指當調用真實的對象時,代理處理另外一些事【DP】。
在此以代辦手機套餐為例:
測試案例:
[code]int main(){//整個過程中,本人都沒有出現 std::string name = "Jarrett"; //第三方公司 Company cp(name); //申請人(本人)的名字告訴公司 //代理人 Proxy *px = new Proxy(cp); //辦理58元套餐 px->A58(); //辦理88元套餐 px->A88(); //辦理128元套餐 px->A128(); return 0;}
Proxy類實現方法:
[code]//主體,提供介面。無需執行個體化,定義為純虛函數class Subject{public: virtual void A58()const = 0; virtual void A88()const = 0; virtual void A128()const = 0;};//第三方公司class Company{ public: std::string name; //公司要知道辦理套餐本人的名字 Company(std::string na):name(na){} };//本人(被代理人)class oneSelf: public Subject{private: Company cp; //本人要知道自己對誰做什麼,此處自己知道要對哪個公司辦理套餐public: oneSelf(Company c):cp(c){} //此處由代理類來初始化 void A58()const override{ std::cout << cp.name << " for 58 packages.\n"; //告訴移動公司,我要辦58套餐 } void A88()const override{ std::cout << cp.name << " for 88 packages.\n"; } void A128()const override{ std::cout << cp.name << " for 128 packages.\n"; }};class Proxy:public Subject{private: //代理誰? oneSelf os;public: Proxy(Company cp):os(oneSelf(cp)){} //此處初始化本人的建構函式,達到了代理的目的 void A58()const override{ os.A58(); } void A88()const override{ os.A88(); } void A128()const override{ os.A128(); }};
以上就是C++設計模式淺識代理模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!