我正在学习反思的概念,而我正在阅读“Java Reflection In action”一书。我刚刚开始使用“代理”一章,它说“代理,支持接口 另一个对象,它的目标,以便代理可以为所有实际目的替换目标“。
我可以通过一个真实的生活简单例子来理解这个代理概念吗?
答案 0 :(得分:1)
经典示例是一个RMI代理,其中对本地代理对象进行的方法调用导致对驻留在另一台机器上的另一个JVM中的代理对象进行方法调用。
代理允许调用者将远程对象视为本地对象......在大多数方面。
答案 1 :(得分:1)
嗯,代理只是一个机制,你可以做不同的事情,很多框架以各种方式使用它们。
然而,以下是可以使用代理的“经典”区域:
注意:这些区域有一些重叠。
在论文“On the design of the ECMAScript Reflection API”中,作者在两种主要代理之间进行了贬低:
通用包装。将其他对象包装在同一地址中的代理 空间。例如,使用包括访问控制包装器(例如可撤销包装器) 参考),高阶合同[Findler和Felleisen 2002], 分析,污点跟踪等。
虚拟对象。模仿的代理人 其他对象,没有必须存在的模拟对象 相同的地址空间。示例包括远程对象代理 (模拟其他地址空间中的对象),持久对象(模拟 存储在数据库中的对象),透明的未来(不模仿对象) 但计算过的,懒惰的实例化对象,测试模型等等。
我认为它或多或少涵盖了我之前描述的领域。但是没有列表会完整。代理人没有固定的案例 - 它是一种通用的机制或原则。