代理模式

介绍

代理模式:(Proxy)为其他对象提供一种代理以控制对这个对象的访问,一种对象结构型模式。

Proxy结构图


Subject:抽象主题角色
Proxy:代理主题角色
RealSubject:真是主题角色

举例:

时间:五年前一天下午放学                    地点:娇娇所在的中学高二年级                      人物:娇娇、戴励、卓贾易

“娇娇同学,这是有人送你的礼物。”一个男生手里拿着一个芭比娃娃送到她面前。

戴励同学,这是什么意思?“娇娇望着同学同班的这个男生,感觉很奇怪。

”是这样的,我的好朋友,隔壁三班的卓贾易同学,请我代他送你这个礼物的。“戴励有些脸红。

”为什么送我礼物,我不认识他呀。“

”他说...他说...他说想和你交个朋友。“戴励脸更红了,右手抓后脑勺,说话吞吞吐吐。

”不用这样,我不需要礼物的。“娇娇显然想拒绝

”别别别,他是我最好的朋友,他请我代他送礼物给你,也是下了很大的决心的,你看在我之前时常帮你辅导数学习题的面子上,就接受一下吧。“戴励有些着急。

”那好吧,今天我对解析几何的椭圆哪里还是不是太懂,你在给我讲讲。“娇娇提出条件后接过礼物。

”没问题,我们到教室去讲吧。“戴励松了口气。

......

几天后

”娇娇,这是卓贾易送你的花。“

......

”娇娇,这是卓贾易送你的巧克力“

”我不要他送的礼物,我也不想和他做朋友。我愿意....我愿意和你做朋友!“娇娇终于忍不住了,直接表白。

代理接口代码

 interface IGiveGift
        {
            void GiveDolls();
            void GiveFlowers();
            void GiveChocolate();
        }
追求者代码

  class Pursuit : IGiveGift
        {
            SchoolGril mm;
            public Pursuit(SchoolGril mm)
            {
                this.mm = mm;

            }
            public void GiveDolls()
            {
                Console.WriteLine(mm.Name+ "送你洋娃娃");
            }
            public void GiveFlowers()
            {
                Console.WriteLine(mm.Name + "送你鲜花");
            }
            public void GiveChocolate()
            {
                Console.WriteLine(mm.Name + "送你巧克力");
            }
        }
代理类代码

class Proxy : IGiveGift
        {
            Pursuit gg;
            public Proxy(SchoolGril mm)
            {
                gg = new Pursuit(mm);

            }
            public void GiveDolls()
            {
                gg.GiveChocolate();
            }
            public void GiveFlowers()
            {
                gg.GiveChocolate();
            }
            public void GiveChocolate()
            {
                gg.GiveChocolate();
            }
        }
客户端代码

static void Main(string[] args)
        {
            SchoolGril jiaojiao = new SchoolGril();
            jiaojiao.Name = "李娇娇";

            Proxy daili = new Proxy(jiaojiao);

            daili.GiveDolls();
            daili.GiveFlowers();
            daili.GiveChocolate();

            Console.Read();

        }

娇娇不认识追求者(卓贾易)但是能却能够收到追求者的礼物,这样就达到了代理模式的效果。

代理模式的优点:

1、代理模式能够协调调用者被调用者,在一定程度上降低了系统的耦合度
2、远程代理使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求
3、虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度
4、保护代理可以控制对真实对象的使用权限。

缺点

1、由于在客户端和真实主题之间增加了代理对象,因此 有些类型的代理模式可能会造成请求处理速度变慢。
2、实现代理模式需要额外的工作,有些代理的实现非常复杂。


分类


1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2)虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的对象。
3)安全代理,用来控制真实对象访问时的权限。
4)智能指引,当调用目标对象时,代理可以处理其他的一些操作。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值