程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#設計模式之代理模式

C#設計模式之代理模式

編輯:C#入門知識

導言:臨近年關,提高班也要放假了,我不得不去老王店裡買點東西,因為有要事在身,我委托了火雲去王老板那裡買點鮮花與糖果。   \       在這裡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.智能指引:當調用真實的對象時,代理處理另外一些事.   代理模式其實就是在訪問對象時引入一定程度的間接性,因為這種間接性,可以附加多重用途。   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved