代理模式

来源:互联网 发布:short在c语言中 编辑:程序博客网 时间:2024/06/04 19:00

http://blog.csdn.net/lhc1105/article/details/21000767


代理模式模型    

    为其它对象提供一种代理以控制对这个对象的访问.


         


      

  示例

       

      在高中的时候,有很多害羞的孩纸们有了暗恋的对象后,如果自己不好意思给自己的女神或者男神送礼物的话,通常都会找一个跟自己暗恋者关系比较好的,托它帮自己送东西,这种恋爱的方式就是代理模式。说通俗一点儿,就叫为别人做嫁衣模式。因为看起来始终是代理在做这一切的活动,RealSubject始终是躲在幕后的,不积极主动的结果就是代理最终和被暗恋者有情人终成眷属了。

     当然,代理模式不仅仅只有“为他人做嫁衣”这一个作用。这种适得其反的效果我们还是不提倡的。生活中还有很多代理模式。比如,银行卡支付。每次逛街,带张卡,一切搞定。

    结构如图:

   


   我们把钱放在银行卡里,当卖完东西要向老板付钱的时候,只要刷卡就搞定了。所以,这里,银行卡代理了自己存在银行的现钞,并在买东西是执行付钱的动作。这样是不是非常的方便呢!出门时,妈妈再也不用担心我的钱被小偷偷走了。


   代码如下:

  

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. namespace 银行卡买东西  
  2. {  
  3.      class Boss  //商品类  
  4.     {  
  5.         private string name;  
  6.         public string Name  
  7.         {  
  8.             get { return name; }  
  9.             set { name = value; }  
  10.         }  
  11.    
  12.     }  
  13.   
  14.     interface BuyGoods  //买东西的接口  
  15.     {  
  16.         void BuyClothes();  //买衣服  
  17.         void BuyFood();   //买吃的  
  18.         void BuyBooks();   //买书  
  19.    
  20.     }  
  21.   
  22.    
  23.     class MyCash : BuyGoods    //银行卡中的现金  
  24.     {  
  25.         Boss boss;  //定义收钱的人  
  26.         public MyCash(Boss boss)     
  27.         {  
  28.             this.boss = boss;  
  29.               
  30.         }  
  31.   
  32.         public void BuyClothes()  
  33.         {  
  34.             Console.WriteLine(boss.Name + ",我买这件衣服了,给你钱。");  
  35.         }  
  36.   
  37.         public void BuyFood()  
  38.         {  
  39.             Console.WriteLine(boss.Name + ",我要吃这个,给你钱。");  
  40.    
  41.         }  
  42.   
  43.         public void BuyBooks()  
  44.         {  
  45.             Console.WriteLine(boss.Name + ",我要这本书,给你钱。");  
  46.    
  47.         }  
  48.    
  49.     }  
  50.   
  51.     class BankCard:BuyGoods   
  52.     {  
  53.         MyCash myRMB;  
  54.         public BankCard(Boss boss)  
  55.         {  
  56.             myRMB = new MyCash(boss);  
  57.         }  
  58.   
  59.         public void BuyClothes()  
  60.         {  
  61.             myRMB.BuyClothes();  
  62.         }  
  63.   
  64.         public void BuyFood()  
  65.         {  
  66.             myRMB.BuyFood();  
  67.   
  68.         }  
  69.   
  70.         public void BuyBooks()  
  71.         {  
  72.             myRMB.BuyBooks();  
  73.   
  74.         }  
  75.    
  76.     }  
  77.   
  78.   
  79.   
  80.     class Program  
  81.     {  
  82.         static void Main(string[] args)  
  83.         {  
  84.             Boss LaoBan = new Boss();  
  85.             LaoBan.Name = "老板";  
  86.   
  87.             BankCard ACBCCard = new BankCard(LaoBan);  
  88.   
  89.             ACBCCard.BuyClothes();  
  90.             ACBCCard.BuyFood();  
  91.             ACBCCard.BuyBooks();  
  92.   
  93.   
  94.   
  95.   
  96.         }  
  97.     }  
  98. }  

运行后如图:

     

   PS:我要是真的有张可以这样消费的卡就好了。


0 0
原创粉丝点击