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


 
设计模式之代理模式之静态代理模式
 
     代理模式(Proxy
pattern
 
         核心作用:
 
              通过代理,控制对对象的访问。
 
                   可以通过详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即AOP的微观实现)
 
              AOP(面向切面编程。Aspect
Oriented Programming)的核心实现的机制
 
         举个例子来理解这种模式。例如明星,我的偶像周杰伦唱歌这种事。倘若有某个客户想让杰伦来唱歌。当然,杰伦作为明星类的对象,内部可以具有
 
  1. 面谈
  2. 合同起草
  3. 签字,收预付款
  4. 安排机票和车辆
  5. 唱歌
  6. 收尾款









当然,这样也会实现客户的需求。但是我们可以看到,杰伦会有多累呀。而且在这个过程中有太多事不需要杰伦操心。比如,面谈,合同起草等等,杰伦唯一需要关心的就是唱歌。我们当然不允许杰伦被其他的琐事分心,但其他的事情毕竟也很要紧,而且是每场演唱会都要坐做的流程。所以不能缺少。
 
因此,这也就出现了经纪人的概念。
 
 
 
倘若,此刻有用户想请杰伦来唱歌。他需要做的只是找杰伦的经纪人,来让经纪人面谈,合同起草,收尾款等等。而在客户要求代理唱歌的时候,在具体实现的过程中,由代理请求杰伦来唱歌。当然,这种结构很方便,因为如果这个经纪人也有其他的明星,只需要修改经纪人(代理)的内部的唱歌的方法就可以了。
 
 
 
代理模式(Proxy
Pattern
 
     核心角色:
 
  • 抽象角色
    
    定义代理角色和真是角色的公共对外方法。换言之代理角色和真实角色拥有一套相同的来自于抽象角色的方法
  • 真实角色
    
    实现抽象角色,定义真实角色所要实现的业务逻辑(比如唱歌,杰伦会唱歌,而代理人并不会唱),供代理角色使用
    
    关注真正的业务逻辑(唱歌)
  • 代理角色:
    
    实现抽象角色,是真实角色的代理(经纪人),通过真实角色的业务逻辑(换言之,代理角色需要有个真实角色的成员变量,以访问真实角色的业务逻辑(比如唱歌))来实现抽象方法。并可以附加自己的操作。
    
    
    
    将统一的流程控制放到代理角色中处理



 
 
应用场景:
 
     安全代理:屏蔽对真实角色的访问
 
     远程代理:通过代理类处理远程方法调用(RMI

     延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。
 
         比如你要开发一个大文档查看软件,大文档有大量图片,有可能一个图片有100M,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用Proxy进行大图片的打开。
 
 
 
分类:
 
     静态代理(静态定义代理类),即我们自己动手实现。
 
     动态代理(动态生成代理类):不需要我们自定义,使用默认的
 
  • JDK自带的动态代理
  • Javaassist字节码操作库实现
  • CGLIB
  • ASM(底层使用指令,可维护性较差)





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值