资讯专栏INFORMATION COLUMN

设计模式(7)代理模式(讲解+应用)

JasinYip / 3308人阅读

摘要:目录代理模式为什么使用代理模式应用实例代理模式对于代理模式,和委托方式分不开,感觉委托和代理没有什么区别,而委托却不被称做一个设计模式,今天再次看代理模式,才有所理解。回到正题代理模式为对象提供一个替身或者是占一个位子,从而控制对其访问。

目录

代理模式

为什么使用代理模式

应用实例

代理模式

对于代理模式,和委托方式分不开,感觉委托和代理没有什么区别,而委托却不被称做一个设计模式,今天再次看代理模式,才有所理解。从这一点也发现了一个问题,有些时候,我们再去看一本技术的书的时候,第一遍有些概念往往晦涩难懂,特别是在未看设计模式去看《Thinking in Java》的时候,当时看的就会有点小焦虑,看不下去,想跳过去吧,有会有种自我谴责的意识出现,现在看来对于一些概念不懂的甚至是一知半解的,其实没有必要去死扣,跳过去接着看,然后等着再回过头看一遍,很多概念就不会让你感觉像是第一次那样晦涩,同时对于一些好书,即使第一次看过去,感觉没什么问题,在回读一遍,你还是会发现会有不同的理解和感悟的。
回到正题

代理模式:为对象提供一个替身或者是占一个位子,从而控制对其访问。

代理VS委托*
而我们常用的委托呢?是在类的内部创建一个局部变量,用来表示该对象,然后通过某种方法或者是构造函数将实例注入,这看起来确实是给对象占了一个位子,但是注意代理模式的主要目的是用来控制对其访问,而我们使用的委托模式是起不到的这个作用的,因为实例都是通过方法从外部注入进来的,又谈何对其在类内部进行访问控制。

为什么使用代理模式

当我们有一个数据集,不同的用户对该数据集有不同的权限,因此如果我们对控制数据集的对象进行权限的设定以此来控制我们数据的存取,从而对我们的数据起到一个保护的作用。

主题抽象类 
 abstract   public   class  Subject  {
    abstract   public   void  request(); 
}   


真实主题类 
 public   class  RealSubject  extends  Subject  { 
     public  RealSubject()  { }  
    
     public   void  request()  { 
        System.out.println( " From real subject. " ); 
    }  
}  


代理类
public   class  ProxySubject  extends  Subject  { 
     private  RealSubject realSubject;  // 以真实角色作为代理角色的属性  
 
      public  ProxySubject()  { }  


     public   void  request()  {  // 该方法封装了真实对象的request方法  
         preRequest(); 

         if ( realSubject  ==   null  )  { 

            realSubject  =   new  RealSubject(); 
        }  

        realSubject.request();  // 此处执行真实对象的request方法  
 
        postRequest(); 
    } 
 

通过一个代理类,将我们真实的实例作为一个属性,然后在代理类中执行相应的操作。有什么用途呢,比如上面某一个主题的一个方法并不是对没一个用户都开发权限的,所以在进行操作之前,我们要对该权限进行一个判断,这样我们可以在代理类中进行一个判断,同时还可以在执行完方法之后进行一下其它的操作。

应用实例

现实中的应用的比较多的有远程代理,本地的对象,在服务端还有一个对象,服务端对对象执行的操作,本地端就会执行,但是碍于对其了解不深,也咩有拿这个来举例子,实际开发中用到代理的还有很多地方,比如

防火墙代理:对网络资源进行保护,防止恶意侵害

缓存代理:为开销大的计算结果提供缓存

等等,

下篇更模板方法,对于模板方法和钩子方法通过Android的View相关进行举例。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64608.html

相关文章

  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • Java 总结

    摘要:中的详解必修个多线程问题总结个多线程问题总结有哪些源代码看了后让你收获很多,代码思维和能力有较大的提升有哪些源代码看了后让你收获很多,代码思维和能力有较大的提升开源的运行原理从虚拟机工作流程看运行原理。 自己实现集合框架 (三): 单链表的实现 自己实现集合框架 (三): 单链表的实现 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出 由于 poi 本身只是针对于 ...

    caspar 评论0 收藏0
  • 给女朋友讲解什么是代理模式

    摘要:受知乎文章和设计模式之禅的启发,我也来搞一篇脑洞小开的文章由标题可知,这篇文章是写给我女朋友看的。于是这就让经纪人对粉丝说只有万,我才会写代码。 前言 只有光头才能变强 回顾前面: ThreadLocal就是这么简单 多线程三分钟就可以入个门了! 多线程基础必要知识点!看了学习多线程事半功倍 Java锁机制了解一下 AQS简简单单过一遍 Lock锁子类了解一下 线程池你真不来了解一下...

    stormgens 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<