c# 代理模式
代理模式的應(yīng)用:
遠(yuǎn)程代理,為一個(gè)對(duì)象在不同的地址空間提供局部代表,可以隱藏一個(gè)對(duì)象存在于不同地質(zhì)空間的事實(shí)。
虛擬代理,根據(jù)需要?jiǎng)?chuàng)建開(kāi)銷很大的對(duì)象,通過(guò)代理來(lái)存放實(shí)例化需要很長(zhǎng)時(shí)間的真實(shí)對(duì)象。
安全代理,用來(lái)控制真實(shí)對(duì)象的訪問(wèn)權(quán)限。
智能代理,當(dāng)調(diào)用代理時(shí),可以代理處理一些額外的功能。
案例場(chǎng)景:
向一位自己心儀的女孩表達(dá)愛(ài)意,一般我們有兩種選擇:親自出馬(有自信的人)和 使用‘媒婆'(比較害羞)。
其中使用‘媒婆'就是代理行為,我們實(shí)現(xiàn)如下:
調(diào)用代理模式的主函數(shù):
class Program { static void Main(string[] args) { SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.Name = "李嬌嬌"; //親自出馬 IGiveGift self = new Pursuit(jiaojiao); self.GiveChocolate();//送巧克力 self.GiveDolls();//送洋娃娃 self.GiveFlowers();//送鮮花 //使用‘媒婆' IGiveGift daili = new Proxy(jiaojiao); daili.GiveChocolate();//送巧克力 daili.GiveDolls();//送洋娃娃 daili.GiveFlowers();//送鮮花 Console.ReadKey(); } }
SchoolGirl類是代表女孩對(duì)象,實(shí)現(xiàn)如下:
public class SchoolGirl { private string name; public string Name { get; set; } }
Pursuit類是代表一個(gè)真實(shí)的事物(追求女孩的追求者),實(shí)現(xiàn)如下:
public class Pursuit : IGiveGift { SchoolGirl mm; public Pursuit(SchoolGirl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(mm.Name+"送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(mm.Name + "送你鮮花"); } public void GiveChocolate() { Console.WriteLine(mm.Name + "送你巧克力"); } }
Proxy類是Pursuit類的代表,實(shí)現(xiàn)如下:
public class Proxy : IGiveGift { Pursuit gg; public Proxy(SchoolGirl mm) { this.gg = new Pursuit(mm); } public void GiveDolls() { gg.GiveDolls(); } public void GiveFlowers() { gg.GiveFlowers(); } public void GiveChocolate() { gg.GiveChocolate(); } }
Pursuit類和Proxy類都繼承IGiveGift接口,實(shí)現(xiàn)如下:
interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); }
我們看一張代理模式的結(jié)構(gòu)圖:
相關(guān)文章
C# 中的 IReadOnlyDictionary 和 IReadOnlyLis
C# 中的IReadOnlyDictionary和IReadOnlyList是接口,用于表示只讀的字典和只讀的列表,這些接口提供了對(duì)集合的只讀訪問(wèn)權(quán)限,即不允許對(duì)集合進(jìn)行修改操作,這篇文章主要介紹了C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解,需要的朋友可以參考下2024-03-03C#利用Refit實(shí)現(xiàn)JWT自動(dòng)續(xù)期詳解
Refit?是一個(gè)受到Square的Retrofit庫(kù)(Java)啟發(fā)的自動(dòng)類型安全REST庫(kù),這篇文章主要為大家介紹了C#如何利用Refit實(shí)現(xiàn)JWT自動(dòng)續(xù)期,感興趣的可以了解下2023-08-08C#使用DateAndTime.DateDiff實(shí)現(xiàn)計(jì)算年齡
這篇文章主要為大家詳細(xì)介紹了C#如何使用DateAndTime.DateDiff實(shí)現(xiàn)根據(jù)生日計(jì)算年齡,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-01-01C#后臺(tái)接受前臺(tái)JSON字符串裝換成字典集合處理
本文介紹C#利用Newtonsoft接收前端的JSON字符串,并解析反序列化成字典集合,對(duì)其進(jìn)行處理。2016-04-04