设计模式---代理模式

代理

         代理这个词在我们的生活中应该听到过不少,顾名思义,代理的意思就是如果有三个人,A,B,C,A想要给C东西,而又因为一些原因不能亲自给到B,那么正好有一个C可以代替A去做这件事,就是代替别人做一些事情的人叫做代理人。

       代理一般是指在其行业惯例范围内接受他人委托,为他人促成或缔结交易的一般代理人。 代理商(Agents)是代企业打理生意,是厂家给予商家佣金额度的一种经营行为。所代理货物的所有权属于厂家,而不是商家。因为商家不是售卖自己的产品,而是代企业转手卖出去。所以“代理商”,一般是指赚取企业代理佣金的商业单位。(百度回答)

代理的特点

   1、职责主要是为本人促成交易和缔结交易;
  2、必须固定地从事受他人委托的活动;
  3、是独立的商事经营者;
  4、代理对象不必是商人,也可以不以营利为目的

代理模式

      代理模式Proxy Pattern,23种常用的面向对象软件的设计模式之一,为其他对象提供一种代理以控制对这个对象的访问。

代理模式的应用

        代理模式一般在下列几种情况下使用,
        1,远程代理:
                这个就是一个对象在不同的地址空间提供局部嗲表,这样可以隐藏一个对象存在于不同地址空间的事实。在一个项目中加入一个Web引用,引用一个WebService,这是在项目中生成一个WebReference的文件夹和文件,使得客户端程序调用dialing就可以解决远程访问的问题。
        2,虚拟代理:
                根据需要创建开销很大的对象,通过他来存放实例化需要时间的真实对象,从而达到性能的最优化。就像刷网页的时候,有时候网上不好,你看到的图片是一个个未打开的状态,这个就是通过虚拟代理来代替真实的图片,代理存储了真实图片的路径和尺寸。
        3,安全代理:
                用来控制真实对象访问时的权限,一般用于对象有不同的访问权限的时候。
        4,智能指引:
                当调用真实的对象时,代理处理另外一些事。

          

代理模式的结构图

         

      用一个比较简单的例子来让我们更加容易的去学习代理模式。就是我们学过的一个例子,三个人,第一个人通过中间人去送给第三个人的礼物。


代码展示:

           

代理接口


    interface IGiveGift 
    {
        void GiveDolls();
        void GiveFlowers();
        void GiveChocolate();
    } 
第一个人类

 class Pursuit : IGiveGift  //唯一变化的是让“追求者”去实现“送礼物”接口
    {
        SchoolGirl mm;
        public Pursuit(SchoolGirl 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 + "送你巧克力");
        }

    }


</pre><pre>

中间人类

   class proxy : IGiveGift  //让“代理”也去实现“送礼物”接口
    {
        Pursuit gg;
        public proxy(SchoolGirl mm)
        {
            gg = new Pursuit(mm);
        }
        public void GiveDolls()
        {
            gg.GiveDolls();//在实现方法中去调用“追求者”类的相关方法
        }
        public void GiveFlowers()
        {
            gg.GiveFlowers();
        }
        public void GiveChocolate()
        {
            gg.GiveChocolate();
        }
     }

主函数中使用的代码

 static void Main(string[] args)
        {
            SchoolGirl jiaojiao = new SchoolGirl();
            jiaojiao.Name = "美美";
            proxy daili = new proxy(jiaojiao);
            daili.GiveDolls();
            daili.GiveFlowers();
            daili.GiveChocolate();
            Console.Read();
        }
运行效果


总结:

        代理模式在访问对象时引用一定程度的间接性,这种间接性,可以附加多种用途,简单的说,代理就是真实对象的代表。学习了这个模式,感觉还是理解的不是特别到位,简单的总结一下,哪里理解有误的请大神扶正~~~~微笑微笑微笑




评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值