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)文章
解析如何正確使用SqlConnection的實(shí)現(xiàn)方法
本篇文章對(duì)如何正確使用SqlConnection的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
c# 判斷指定文件是否存在的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了c# 判斷指定文件是否存在的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下2014-02-02
C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘四 雙向鏈表
上節(jié)說(shuō)過(guò)這節(jié)會(huì)講雙向鏈表,環(huán)形鏈表和應(yīng)用舉例,我們開(kāi)始吧?。。?!2012-11-11
C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)讀取二維數(shù)組集合并輸出到Word預(yù)設(shè)表格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法
這篇文章主要介紹了C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08

