導言:臨近年關,提高班也要放假了,我不得不去老王店裡買點東西,因為有要事在身,我委托了火雲去王老板那裡買點鮮花與糖果。 在這裡subject定義為一個接口,RealSubject為本人,Proxy即為火雲,我和火雲繼承了這個接口來實現買東西這件事情。代碼為: [csharp] <SPAN style="FONT-SIZE: 18px">interface BuySomething //接口-買東西 { void BuyFlowers(); void BuyCandys(); } class MoneySource : BuySomething //出錢者-我 { ShopKeeper laowang; public MoneySource(ShopKeeper laowang) { this.laowang = laowang; } public void BuyFlowers() { Console.WriteLine(laowang.Name + "我要買鮮花"); } public void BuyCandys() { Console.WriteLine(laowang.Name + "我要買糖果"); } } class ShopKeeper //商店店主-老王 { private string name; public string Name { get { return name; } set { name = value; } } } class Proxy : BuySomething //代理類 { MoneySource gangge; public Proxy(ShopKeeper laowang) { gangge = new MoneySource(laowang); } public void BuyFlowers() { gangge.BuyFlowers(); } public void BuyCandys() { gangge.BuyCandys(); } }</SPAN> interface BuySomething //接口-買東西 { void BuyFlowers(); void BuyCandys(); } class MoneySource : BuySomething //出錢者-我 { ShopKeeper laowang; public MoneySource(ShopKeeper laowang) { this.laowang = laowang; } public void BuyFlowers() { Console.WriteLine(laowang.Name + "我要買鮮花"); } public void BuyCandys() { Console.WriteLine(laowang.Name + "我要買糖果"); } } class ShopKeeper //商店店主-老王 { private string name; public string Name { get { return name; } set { name = value; } } } class Proxy : BuySomething //代理類 { MoneySource gangge; public Proxy(ShopKeeper laowang) { gangge = new MoneySource(laowang); } public void BuyFlowers() { gangge.BuyFlowers(); } public void BuyCandys() { gangge.BuyCandys(); } } 在代理類中,保存了一個引用使得代理可以訪問實體。也就是說火雲這個代理裡面有我讓他買東西的方法存在。 客戶端代碼: [csharp] <SPAN style="FONT-SIZE: 18px">static void Main(string[] args) { ShopKeeper laowang = new ShopKeeper(); laowang.Name = "王陸軍"; Proxy huoyun = new Proxy(laowang); huoyun.BuyFlowers(); huoyun.BuyCandys(); Console.Read(); }</SPAN> static void Main(string[] args) { ShopKeeper laowang = new ShopKeeper(); laowang.Name = "王陸軍"; Proxy huoyun = new Proxy(laowang); huoyun.BuyFlowers(); huoyun.BuyCandys(); Console.Read(); }這樣就可以達到讓火雲替我買東西的事情了。 代理模式:就是為其他對象提供一種代理以控制對這個對象的訪問 在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。 代理模式分為: 1.遠程代理:為一個對象在不同的地址空間提供局部代表.這樣可以隱藏一個對象存在於不同地址空間的事實. 2.虛擬代理:根據需要創建開銷很大的對象,通過它來存放實例化需要很長時間的真實對象. 3.安全代理:用來控制真實對象訪問時的權限. 4.智能指引:當調用真實的對象時,代理處理另外一些事. 代理模式其實就是在訪問對象時引入一定程度的間接性,因為這種間接性,可以附加多重用途。