博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java动态代理模式
阅读量:4112 次
发布时间:2019-05-25

本文共 1388 字,大约阅读时间需要 4 分钟。

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

涉及一个接口一个类:

InvocationHandlerProxy

角色代码准备:

抽象角色:

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.接口必须有具体的显示实现类而不能动态绑定

 

转载地址:http://xnqsi.baihongyu.com/

你可能感兴趣的文章
常用js收集
查看>>
mydata97的日期控件
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android-Socket登录实例
查看>>
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第四章 - 程序计数器
查看>>
第七章 - 本地方法栈
查看>>