码迷,mamicode.com
首页 > 其他好文 > 详细

GOF23代理模式之静态代理模式理解之经典

时间:2015-04-05 09:09:19      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:gof23   代理模式   静态代理模式   



设计模式之代理模式之静态代理模式

     代理模式(Proxy
pattern

         核心作用:

              通过代理,控制对对象的访问。

                   可以通过详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即AOP的微观实现)

              AOP(面向切面编程。Aspect
Oriented Programming)的核心实现的机制

         举个例子来理解这种模式。例如明星,我的偶像周杰伦唱歌这种事。倘若有某个客户想让杰伦来唱歌。当然,杰伦作为明星类的对象,内部可以具有

  1. 面谈
  2. 合同起草
  3. 签字,收预付款
  4. 安排机票和车辆
  5. 唱歌
  6. 收尾款











当然,这样也会实现客户的需求。但是我们可以看到,杰伦会有多累呀。而且在这个过程中有太多事不需要杰伦操心。比如,面谈,合同起草等等,杰伦唯一需要关心的就是唱歌。我们当然不允许杰伦被其他的琐事分心,但其他的事情毕竟也很要紧,而且是每场演唱会都要坐做的流程。所以不能缺少。

因此,这也就出现了经纪人的概念。

 

倘若,此刻有用户想请杰伦来唱歌。他需要做的只是找杰伦的经纪人,来让经纪人面谈,合同起草,收尾款等等。而在客户要求代理唱歌的时候,在具体实现的过程中,由代理请求杰伦来唱歌。当然,这种结构很方便,因为如果这个经纪人也有其他的明星,只需要修改经纪人(代理)的内部的唱歌的方法就可以了。

 

代理模式(Proxy
Pattern

     核心角色:

  • 抽象角色
    
    定义代理角色和真是角色的公共对外方法。换言之代理角色和真实角色拥有一套相同的来自于抽象角色的方法
  • 真实角色
    
    实现抽象角色,定义真实角色所要实现的业务逻辑(比如唱歌,杰伦会唱歌,而代理人并不会唱),供代理角色使用
    
    关注真正的业务逻辑(唱歌)
  • 代理角色:
    
    实现抽象角色,是真实角色的代理(经纪人),通过真实角色的业务逻辑(换言之,代理角色需要有个真实角色的成员变量,以访问真实角色的业务逻辑(比如唱歌))来实现抽象方法。并可以附加自己的操作。
    
    
    
    将统一的流程控制放到代理角色中处理





 

应用场景:

     安全代理:屏蔽对真实角色的访问

     远程代理:通过代理类处理远程方法调用(RMI

     延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。

         比如你要开发一个大文档查看软件,大文档有大量图片,有可能一个图片有100M,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用Proxy进行大图片的打开。

 

分类:

     静态代理(静态定义代理类),即我们自己动手实现。

     动态代理(动态生成代理类):不需要我们自定义,使用默认的

  • JDK自带的动态代理
  • Javaassist字节码操作库实现
  • CGLIB
  • ASM(底层使用指令,可维护性较差)







GOF23代理模式之静态代理模式理解之经典

标签:gof23   代理模式   静态代理模式   

原文地址:http://blog.csdn.net/lk142500/article/details/44875953

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!