概述 代理模式就是給某一個對象提供一個代理,並由代理對象控制對原對象的引用。在一些情況下,一個客戶不想或者不能直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。例如電腦桌面的快捷方式就是一個代理對象,快捷方式是它所引用的程式的一個代理。 代理模式一般又分為安全代理,虛擬代理 ,遠 ...
概述
代理模式就是給某一個對象提供一個代理,並由代理對象控制對原對象的引用。在一些情況下,一個客戶不想或者不能直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。例如電腦桌面的快捷方式就是一個代理對象,快捷方式是它所引用的程式的一個代理。
代理模式一般又分為安全代理,虛擬代理 ,遠程代理。
類圖
需求
老王想邀請馬冬梅喝酒,抽煙,穿JK,但老王不善言談,有點羞澀,只能讓其秘書出面邀請,最後他陪馬冬梅抽煙,喝酒、穿JK。
使用代理模式的代碼
public class ClassFlower { public string Name { get; set; } public ClassFlower(string name) { Name=name; } } /// <summary> /// 不管是代理還是十幾人都需要做的共同動作 /// </summary> public interface ISubject { void GiveSmoking(); void GiveBeer(); void GiveJK(); } /// <summary> /// 實際人 /// </summary> public class RealLaoWang : ISubject { private readonly ClassFlower _classFlower; public RealLaoWang(ClassFlower classFlower) { _classFlower = classFlower; } public void GiveBeer() { Console.WriteLine($"{_classFlower.Name}:請你喝酒"); } public void GiveJK() { Console.WriteLine($"{_classFlower.Name}:請你穿JK"); } public void GiveSmoking() { Console.WriteLine($"{_classFlower.Name}:請你抽煙"); } } /// <summary> /// 代理人 /// </summary> public class Proxy : ISubject { private readonly RealLaoWang _realLaoWang; public Proxy(RealLaoWang realLaoWang) { _realLaoWang = realLaoWang; } public void GiveBeer() { _realLaoWang.GiveBeer(); } public void GiveJK() { _realLaoWang.GiveJK(); } public void GiveSmoking() { _realLaoWang.GiveSmoking(); }
//C#控制台調用 ClassFlower classFlower = new ClassFlower("馬冬梅"); RealLaoWang realLaoWang=new RealLaoWang(classFlower); // 生成代理對象,傳入被代理的對象 Proxy proxy=new Proxy(realLaoWang); ISubject subject = proxy; subject.GiveBeer(); subject.GiveJK(); subject.GiveSmoking();
代理模式的優缺點
優點:
- 代理模式能夠將調用用於真正被調用的對象隔離,在一定程度上降低了系統的耦合度;
- 代理對象在客戶端和目標對象之間起到一個中介的作用,這樣可以起到對目標對象的保護。代理對象可以在對目標對象發出請求之前進行一個額外的操作,例如許可權檢查等。
缺點:
- 由於在客戶端和真實主題之間增加了一個代理對象,所以會造成請求的處理速度變慢。
- 實現代理類也需要額外的工作,從而增加了系統的實現複雜度。
總結
到這裡,代理模式的介紹就結束了,代理模式就是提供了對目標對象訪問的代理,有沒有發現、設計模式越往後面學習越簡單,當然了,有可能也越學越暈,如果發現比較學習的比較亂、暈,建議前面的文章多看幾遍,自己舉例實操反覆練習鞏固下。
作者:realyrare
出處:https://www.cnblogs.com/mhg215/
聲援博主:如果您覺得文章對您有幫助,請點擊文章末尾的【關註我】吧!
別忘記點擊文章右下角的【推薦】支持一波。~~~///(^v^)\\\~~~ .
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
如果您有其他問題,也歡迎關註我下方的公眾號,可以聯繫我一起交流切磋!