代理模式(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++設計模式淺識代理模式的內容,更多相關內容www .php.cn)!