您的位置:首页 > 编程语言 > Java开发

java动态代理设计模式简单示例

2012-05-18 08:29 761 查看
package chart03.proxy;
/**
 * 增强操作,对于被代理对象的扩充
 * @author heshengjun
 *
 */
public interface IAdvise {

	public abstract void doBefore();

	public abstract void doAfter();

}


package chart03.proxy;

public class AdviseImpl implements IAdvise {
	

	@Override
	public void doBefore(){
		System.out.println("画家准备画画了。。。。");
	}
	

	@Override
	public 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();

	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: