java动态代理设计模式简单示例
来源:互联网 发布:linux打开目录命令 编辑:程序博客网 时间:2024/06/05 11:29
package chart03.proxy;/** * 增强操作,对于被代理对象的扩充 * @author heshengjun * */public interface IAdvise {public abstract void doBefore();public abstract void doAfter();}
package chart03.proxy;public class AdviseImpl implements IAdvise {@Overridepublic void doBefore(){System.out.println("画家准备画画了。。。。");}@Overridepublic void doAfter(){System.out.println("画家画完画了");}}
package chart03.proxy;/** * 需要代理的对象的接口 * @author heshengjun * */public interface IPicShow {public abstract void show();}
package chart03.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class PicHardler implements InvocationHandler {private IAdvise advise;private IPicShow pic;public PicHardler(IAdvise advise) {this.advise=advise;}public Object bind(IPicShow pic){this.pic=pic;return Proxy.newProxyInstance(pic.getClass().getClassLoader(), pic.getClass().getInterfaces(), this);}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object obj=null;System.out.println(args);if("show".equals(method.getName())){this.advise.doBefore();obj=method.invoke(pic, args);this.advise.doAfter();return obj;}else{return method.invoke(pic, args);}}}
package chart03.proxy;import java.lang.reflect.InvocationHandler;/** * 动态代理设计模式 * 讲述一个动态代理的基本思路。把基本的功能进行分开。 * 设计思路 * 1、设计一个需要代理的类和接口 * 2、设计一个增强的类和接口 * 3、设计一个代理类 处理类,实现InvocationHardler * 4、创建一个测试类 * * 关键:设计代理类 * 字段:增强方法 增强对象通过构造方法传入 * 代理对象 通过自定义一个方法bind进行返回一个代理对象 * 在测试类中调用代理对象的方法就可以了。 * @author heshengjun * */public class ProxyDesign {public static void main(String[] args) {IPicShow pic=new PicShow();IAdvise advise=new AdviseImpl();PicHardler handler=new PicHardler(advise);IPicShow proxy=(IPicShow)handler.bind(pic);proxy.show();}}