由于前几天做生成文档的功能大量用到了反射机制,所以我闲时看了一下java反射机制的原理,发现里面大量使用了代理模式(java方法的method.invoke()代理native方法的method.invoke,不在此文章展开),由于对代理模式有点陌生了。写这篇文章重新加深一下我对代理模式的理解。
代理模式顾名思义就是,找一个代理人帮你做事。比如B是买房者,要买房必须要经过中介A代理买房,因为B没有联系房东的方式。这里有三个角色,一个是代理对象即A,一个是目标对象B,第三个是A和B的抽象接口对象C。
代理模式分为静态代理和动态代理,以下讲静态代理。下一篇文章讲动态代理
静态代理:代码编译时就确定了被代理的类是哪一个;
静态代理
下面写一个例子来实现静态代理。
运行结果:
可以看到A作为代理对象,可以增强B的接口方法的功能。
由此知道代理模式的好处是:
在不修改目标对象的功能前提下,对目标功能扩展和增强 ,对目标功能增加拦截。比如中介增强了买房人的买房功能,明星经纪人帮明星拦截了狗仔。
当然也有坏处:
比如这种代理模式属于静态代理。每次有目标对象,都得增加一个代理对象。而且接口的功能如果要改变的话,目标和代理对象都得改,十分不方便。