大话设计模式:代理模式

一、什么是代理模式
给对象一个代理位置,让代理能操作这对象

代理这个名字很能说明问题,我来代替你做一些事.

UML图

在这里插入图片描述

二、适用场景

所有那些不适于当面到场的对象,就需要找个对象.不管是远程的原因,虚拟的原因,还是安全原因,都可以使用代理.
在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。

三、优缺点

优点
便于对象解除大面积的耦合问题,将功能拆解,客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。
缺点
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。
实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。

四、大话中的例子

娇娇的恋爱史,就是一部代理上位史,买房买车打官司可以代理,谈恋爱可千万别.桌贾谊追求女孩子的所有业务,像送鲜花,送电影票,买早餐全都让戴利做了,娇娇只和戴利有交集,却不认识桌贾谊.

五、我的例子
using System;

namespace AgencyMode
{
    class Program
    {
        static void Main(string[] args)
        {
            Naruto naruto = new Naruto();
            naruto.FindCat(new Cat("小火柴"));
            Console.ReadKey();
        }
    }
    interface Subject
    {
        void FindCat(Cat maomi);
    }
    class Cat
    {
        string catName;
        public string CatName { get { return catName; } set { catName = value; } }
        public Cat(string catName)
        {
            this.catName = catName;
        }

    }

    class Villager : Subject
    {
        public void FindCat(Cat maomi)
        {
            Console.WriteLine("找一只叫{0}的猫咪", maomi.CatName);
        }
    }

    class Naruto : Subject
    {
        Villager villager;

        public Naruto()
        {
            if (villager == null)
                villager = new Villager();
        }

        public void FindCat(Cat maomi)
        {
            villager.FindCat(maomi);
        }
    }
}

运行结果

在这里插入图片描述
PS:代理在实际需求对象与业务方之间多加了一层中介,也就是代理,这无论如何都会增加类的复杂性.所以在有实际需要的时候使用才合适.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值