设计模式之代理模式

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


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

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多重用途。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值