代理与动态代理

 

为什么要使用动态代理呢? 我们从反面设想,不使用动态代理,那么就使用普通代理模式,普通代理模式的特点一对一,一个原始类,一个代理类,如果有N多个原始类,

就有N多个代理类,结果造成代码琐碎,比如权限代理,要为每个原始类都建立一个其实内部内容都差不多的代理类。

那么动态代理正好解决这个问题,只要建立一个权限动态代理类,就能够为多个原始类进行代理。

这其中演变深深包含了面向“类”编程到面向“对象实例object instance”编程的转变。

真正代理其实应该是对象实例的代理,但是过去如果没有Java的语言级别提供动态代理库支持,那么我们只能转换为用代理类实现,这是一种妥协和让步。

GoF<设计模式>一书中对代理模式有很好的介绍,
它介绍了四种情况:
  1.远程代理 Remote Proxy
     通过代理来表示另一个地址空间中的对象
 2.虚代理 Virtual Proxy
     按需创建开销很大的对象. 常用于延迟加载.
  3.保护代理 Protection Proxy
    -控制对原始对象的访问.
    -在访问对象时可以附加一些操作
 4.智能指引 Smart Reference
     -充当智能指针: 能自动释放所引用的对象
   -在访问对象时可以附加一些操作


用通俗的方法来解释一下为什么需要代理。

打个比喻,明星为什么需要经纪人来代理他呢?因为明星的专职是唱歌或演戏,如果把除此以外的其他事情比如演出费用谈判等等都揽在身上,他会累死。

这就是体现一个思想:专业分工,用面向对象术语说:就是职责分明。

所以,代理类一般是做些除原始类核心功能以外的其他功能,比如权限 事务等等都要专门的代理来实现。

当我们的代码每个类代表一个主要功能,而不是将所有功能混在一个类中,那么代码无疑清晰有条理的,易于维护,比如我要修改权限,就不必打开原始类代码,直接修改权限代理类就可以了。就很少发生修改一个BUG,带来一个新BUG的烦恼问题。

No matter how slow you are writing clean code, you will always be slower if you make a mess
写干净的代码无论有多慢,总是快于把代码写得一团糟。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值