当前位置:编程学习 > C#/ASP.NET >>

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();
        }这样就可以达到让火云替我买东西的事情了。
 
 
代理模式:就是为其他对象提供一种代理以控制对这个对象的访问
 
 
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
 
 
 
<
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,