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();}}

原创粉丝点击