Java动态代理模式

动态代理是为了弥补静态代理的不足,概念等同于普通的代理模式,在实现上稍有区别。

涉及一个接口一个类:

InvocationHandler
Proxy

角色代码准备:

抽象角色:

public interface IBook {
	String getBookName();

	String getBookPress();
}

真实角色:

public class JavaBook implements IBook {

	@Override
	public String getBookName() {
		return "Java 程序设计";
	}

	@Override
	public String getBookPress() {
		return "上海科学出版社";
	}

}

其他行为:

public class Something {
	public void start() {
		System.out.println("获取图书价格成功");
	}

	public void end() {
		System.out.println("后续可以阅读");
	}
}

代理角色:

public class DynamicProxyBook implements InvocationHandler {
	private Object target;
	private Object others;

	public Object bind(Object target, Object others) {
		this.others = others;
		this.target = target;
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass()
		        .getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Class clazz = this.others.getClass();
		Method start = clazz.getDeclaredMethod("start");
		
		start.invoke(this.others);
		Object result = method.invoke(target);
		System.out.println("result:"+result);
		Method end = clazz.getDeclaredMethod("end");
		start.invoke(this.others);
		return result;
	}

}

测试代码:

public static void main(String[] args) {
	IBook book = (IBook) new DynamicProxyBook().bind(new JavaBook(), new Something());
	book.getBookName();
	book.getBookPress();
}

 

不足:

1.接口必须有具体的显示实现类而不能动态绑定

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值