打字猴:1.700448161e+09
1700448161
1700448162 //当前加载器
1700448163
1700448164 ClassLoader cl=subject.getClass().getClassLoader();
1700448165
1700448166 //动态代理
1700448167
1700448168 Subject proxy=(Subject)Proxy.newProxyInstance(cl, subject.getClass().
1700448169
1700448170 getInterfaces(),handler);
1700448171
1700448172 //执行具体主题角色方法
1700448173
1700448174 proxy.request();
1700448175
1700448176 }
1700448177
1700448178 此时就实现了不用显式创建代理类即实现代理的功能,例如可以在被代理角色执行前进行权限判断,或者执行后进行数据校验。
1700448179
1700448180 动态代理很容易实现通用的代理类,只要在InvocationHandler的invoke方法中读取持久化数据即可实现,而且还能实现动态切入的效果,这也是AOP(Aspect Oriented Programming)编程理念。
1700448181
1700448182
1700448183
1700448184
1700448185 编写高质量代码:改善Java程序的151个建议 [:1700438180]
1700448186 编写高质量代码:改善Java程序的151个建议 建议107:使用反射增加装饰模式的普适性
1700448187
1700448188 装饰模式(Decorator Pattern)的定义是“动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比于生成子类更为灵活”,不过,使用Java的动态代理也可以实现装饰模式的效果,而且其灵活性、适应性都会更强。
1700448189
1700448190 我们以卡通片《猫和老鼠》(《Tom and Jerry》)为例,看看如何包装小Jerry让它更强大。首先定义Jerry的类:老鼠(Rat类),代码如下;
1700448191
1700448192 interface Animal{
1700448193
1700448194 public void doStuff();
1700448195
1700448196 }
1700448197
1700448198 //老鼠是一种动物
1700448199
1700448200 class Rat implements Animal{
1700448201
1700448202 public void doStuff(){
1700448203
1700448204 System.out.println(“Jerry will play with Tom.”);
1700448205
1700448206 }
1700448207
1700448208 }
1700448209
1700448210 接下来我们要给Jerry增加一些能力,比如飞行、钻地等能力,当然使用类继承也很容易实现,但我们这里只是临时地为Rat类增加这些能力,使用装饰模式更符合此处的场景。首先定义装饰类,代码如下:
[ 上一页 ]  [ :1.700448161e+09 ]  [ 下一页 ]