为什么要用代理和动态代理
[该贴被admin于2012-02-14 19:26修改过]
那么动态代理正好解决这个问题,只要建立一个权限动态代理类,就能够为多个原始类进行代理。
这其中演变深深包含了面向“类”编程到面向“对象实例object instance”编程的转变。
真正代理其实应该是对象实例的代理,但是过去如果没有Java的语言级别提供动态代理库支持,那么我们只能转换为用代理类实现,这是一种妥协和让步。
不知说了这么多是否明白?
谢谢帮主的及时答疑,不过我想或许我没表述明白我的问题的本意,我问题的本意首先应该是为啥要代理,这是第一个问题,日常生活中的代理中介,就是为了解决业务相关双方直接交流的不便的问题而产生的,同时还可以提供比直接交流更多的功能。那么编程领域,尤其是Java语言编程范畴的代理产生的原因背景应该是什么呢?也就是什么样的场景下,让我们想到了非代理不行,即必须借助一个中间代理类来替代对目标类的访问和调用,难道也是因为某种不便?那么这种不便具体是些什么呢?再者,代理而且还可以细分到普通代理和动态代理?帮主应该回答了第二个问题,这是我自己没表达清楚的原因,谢谢帮主,希望能继续得到您的教导
打个比喻,明星为什么需要经纪人来代理他呢?因为明星的专职是唱歌或演戏,如果把除此以外的其他事情比如演出费用谈判等等都揽在身上,他会累死。
这就是体现一个思想:专业分工,用面向对象术语说:就是职责分明。
所以,代理类一般是做些除原始类核心功能以外的其他功能,比如权限 事务等等都要专门的代理来实现。
当我们的代码每个类代表一个主要功能,而不是将所有功能混在一个类中,那么代码无疑清晰有条理的,易于维护,比如我要修改权限,就不必打开原始类代码,直接修改权限代理类就可以了。就很少发生修改一个BUG,带来一个新BUG的烦恼问题。
No matter how slow you are writing clean code, you will always be slower if you make a mess 写干净的代码无论有多慢,总是快于把代码写得一团糟。
在设计模式中,两者是对不同的问题而提出的解决方案。
2、代理与访问控制
张三很忙,将一些事情让李四去打理,李四与张三的关系就是代理。
这样,张三就只需专注于必须自己做的事情,节约了时间,提升了工作效率。
啥事情可以不自己做?例如访问权限控制(张三是大Boss,不想过问一些芝麻小事,让助理李四处理就行了)。
3、动态与静态
静态实现时,代理类很多,代码啰嗦;
动态实现时,只有一个代理类,代码简洁,但用起来却比较麻烦一些。
(印象中,动态代理常与工厂模式结合在一起使用, 这样可以避免动态创建代理实例的麻烦。)
4、
和sorra一样,建议还是看看GoF的书吧,你所有的问题,书中都有答案。
以前对java内存模型这个概念就理解得不好,直到看了深入理解java虚拟机一书中第十二章之后,才算是准确理解了一下这个概念,书上就是从并发处理讲起,大致意思是鉴于人类持续压榨计算机的运算能力,所以有人提出了并发处理,进而引出了多任务处理,也就是要求计算机同时做几件事情,那么为啥要同时让计算机做几件事情呢,根本原因在于一般来讲,计算机的运算速度与它自身的存储通讯子系统的速度差距太大,以致于计算机的大部分时间都处于等待状态,为了让它少些等待时间,所以有人就希望计算机能同时做几件事,反正就是让它少等待,多干活。但是一旦这样的话,又会出现这样一个问题,那就是多任务不仅仅需要处理器来计算,而且还需要与内存交互,保存中间结果,以致于他下次再接着完成之前未完全做完的计算任务不至于从头开始计算,但是前面说过了,计算机的存储设备与处理器的运算速度之间有个几个数量级的差距,所以现代计算机就不得不键入高速缓存来将中间结果先暂时缓存起来,这样就暂时解决了处理器与内存之间的速度差距,但是也引入了新的问题,缓存一致性问题。终于引出了最终的问题,那就是一致性的问题。一般来看,为了解决一致性的问题,需要各处理器访问缓存时都遵循一些协议,以保证对数据的读写不至于混乱,能够一致。这完全和java虚拟机内存模型中定义的内存访问操作和硬件访问操作是具有可比性的。由此在java领域也引出了java内存模型这个概念,先不谈java内存模型的具体内容,但但java内存模型产生的背景和它要解决的问题,大家是不是就可以通过上述的描述,有一个稍微清晰和准确的认识了呢?java内存模型就是为了屏蔽各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果。有了这些知识的储备,再去深入研究java内存模型的具体内容和相关理论,是不是就更清晰更容易理解深入一些这些基础理论了呢?所以个人感觉,技术领域任何一种技术的产生,都是有它的具体背景和动机的,不会凭空产生,把握了这个原则去研究学习技术,我相信大家一定会在跋涉技术这座大山的路上少走弯路,早出成绩。