zoukankan      html  css  js  c++  java
  • 代理模式

    赘述:今日所读,代理模式,只是今日所理解,略显稚嫩和浅薄。在博客中记录这些,也不是为了指导谁,只是记录下今日所学,所思,是谓产出。

    代理模式:为其他象提供一种代理控制对这个对象的访问。

    从代理模式的定义,不难看出,代理模式是提供了一个代理类,可以控制被代理对象的访问。类似于房产中介中的中介,可以代理卖房人进行买房,决定卖房人的卖房行为。看类图:

     可以看出,代理类和被代理对象,都实现了共同的接口,其中代理类中封装了被代理对象的引用,这样就可以在代理类中调用被代理对象的行为。

    1.公用接口:

    namespace 代理模式.model
    {
        public interface ISubject
        {
            void Request();
        }
    }

    2.被代理对象实现公用接口:

    namespace 代理模式.model
    {
       public class Subject:ISubject
        {
            public void Request() 
            {
                Console.WriteLine("真实请求");
            }
        }
    }

    3.代理类实现公用接口,并包装了被代理对象的引用:

    namespace 代理模式.model
    {
        public class Proxy:ISubject
        {
            private Subject realSubject;
    
            public void Request() 
            {
                if (realSubject== null)
                    realSubject=new Subject();
                realSubject.Request();
            }
        }
    }

    以上代码就实现了一个简单的代理模式。所以,代理模式是代理了对象的访问。

    代理模式与装饰模式:

      看代理模式的类图,会发现,它与装饰模式的类图实现是如此的类似。装饰模式具体实现过程是通过抽像化一个构件对象,来扩展具体的构件对象职能。其中构件对象和抽线装饰角色类都实现了该抽象接口;装饰角色抽象类中包装了一个具体的构件对象,装饰类继承该抽象类,实现自己的装饰职能,同时调用具体构件对象。以上,是装饰模式下,实现扩展构件对象职能的思路说明。抛开其他的不说,这个不就是完全的代理模式吗。

      二者的区别就在于,代理模式是代理了对象,控制了对象的访问,而装饰模式只是扩展了对象的职能,并不能影响到对象。

    模式的具体区别除了在实现了方式外,最重要的是其设计的目的型。代理模式与装饰模式最根本的区别是其二者目的性不同,不在于具体的实现差异。

  • 相关阅读:
    Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
    Python IDE专用编辑器PyCharm下载及配置安装过程(Ubuntu环境)
    Ubuntu Server14.04 32位安装odoo8.0简单方法
    js打印出对象的方法
    odoo中pos模块由于删除partner导致发生(你试图访问的单据已经删除)错误的解决方法
    django的安装和搭建
    mongodb入门
    js数组的操作
    mongodb的优缺点
    Spring动态切换多数据源解决方案
  • 原文地址:https://www.cnblogs.com/king-tao/p/13290658.html
Copyright © 2011-2022 走看看