Java 设计模式之代理 学习与掌握
Posted 邹奇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 设计模式之代理 学习与掌握相关的知识,希望对你有一定的参考价值。
- 文章讲 静态代理 和 动态代理 两种代理。
什么是代理
- 对其他对象提供一种代理,用来控制对这个被代理对象的访问。
简单来说,在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理分类
- 静态代理
- 动态代理
两种代理的优缺点及应用场景
- 静态代理
【优点】
使用者只关心业务逻辑,不需要着眼内部实现,方便后期的变更和部分共用代码的统一处理。
【缺点】
当代理类中出现的被代理类越来越多时,内部就会显得非常臃肿。反而不利于管理阅读。
【应用】
一些第三方框架的代理,便后后期替换或者定制化变更。
- 动态代理
【优点】
拥有静态代理的优点,同时省去了很多代码,并且扩展性更强,通过反射可以执行任意类型的被代理类方法。
【缺点】
只能代理实现了接口的类,而没有实现接口的类就不能实现动态代理。 通过反射在性能上可以会有一定程度上的性能损耗。
【应用】
被代理类庞大时,需要在某些方法执行前后处理一些事情时,亦或接口类与实现类经常变动时(因为使用反射所以方法的增删改并不需要修改invoke方法)。
实践理解
这里我就不自己写demo给同学们详细讲解了,不过给篇文章的链接,同学们可以好好的读读,实践下,会收货很大的。
两种代理主要区别
-
静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
-
静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
-
动态代理是实现 JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过 Proxy 里的newProxyInstance 得到代理对象。
技术永不眠!我们下期见!
以上是关于Java 设计模式之代理 学习与掌握的主要内容,如果未能解决你的问题,请参考以下文章