Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

C#设计模式之代理模式

$
0
0

导言:临近年关,提高班也要放假了,我不得不去老王店里买点东西,因为有要事在身,我委托了火云去王老板那里买点鲜花与糖果。


在这里subject定义为一个接口,RealSubject为本人,Proxy即为火云,我和火云继承了这个接口来实现买东西这件事情。代码为:

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();
        }

    }

在代理类中,保存了一个引用使得代理可以访问实体。也就是说火云这个代理里面有我让他买东西的方法存在。

客户端代码:

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.智能指引:当调用真实的对象时,代理处理另外一些事.

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多重用途。
作者:a137151062 发表于2013-2-6 11:22:59 原文链接
阅读:22 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>