代理模式

来源:互联网 发布:koss sb45淘宝 编辑:程序博客网 时间:2024/06/05 20:58

     

    代理模式模型    

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


        


     

  示例

      

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

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

    结构如图:

  


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


   代码如下:

  

namespace 银行卡买东西{     class Boss  //商品类    {        private string name;        public string Name        {            get { return name; }            set { name = value; }        }     }    interface BuyGoods  //买东西的接口    {        void BuyClothes();  //买衣服        void BuyFood();   //买吃的        void BuyBooks();   //买书     }     class MyCash : BuyGoods    //银行卡中的现金    {        Boss boss;  //定义收钱的人        public MyCash(Boss boss)           {            this.boss = boss;                    }        public void BuyClothes()        {            Console.WriteLine(boss.Name + ",我买这件衣服了,给你钱。");        }        public void BuyFood()        {            Console.WriteLine(boss.Name + ",我要吃这个,给你钱。");         }        public void BuyBooks()        {            Console.WriteLine(boss.Name + ",我要这本书,给你钱。");         }     }    class BankCard:BuyGoods     {        MyCash myRMB;        public BankCard(Boss boss)        {            myRMB = new MyCash(boss);        }        public void BuyClothes()        {            myRMB.BuyClothes();        }        public void BuyFood()        {            myRMB.BuyFood();        }        public void BuyBooks()        {            myRMB.BuyBooks();        }     }    class Program    {        static void Main(string[] args)        {            Boss LaoBan = new Boss();            LaoBan.Name = "老板";            MyCash ACBCCard = new MyCash(LaoBan);            ACBCCard.BuyClothes();            ACBCCard.BuyFood();            ACBCCard.BuyBooks();        }    }}

运行后如图:

    

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


0 0