黑马程序员技术交流社区
标题:
请大家帮忙看下这个问题?
[打印本页]
作者:
yangfengxiao
时间:
2013-2-25 18:15
标题:
请大家帮忙看下这个问题?
动态代理类的作用是什么?
作者:
黑马刘杰
时间:
2013-2-25 18:30
美女,我先占楼
作者:
黑马刘杰
时间:
2013-2-25 18:41
引用张老师的话:“要为系统中的各种接口的类增加代理功能,那将需要太多的代理类,全部采用静态代理方式,将是一件非常麻烦的事情!写成百上千个代理类,是不是太累!
JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类。”
自我感觉,主要用于做框架,跟做个JVM一样,处理类。
作者:
王小丑
时间:
2013-2-26 13:17
本帖最后由 王文正 于 2013-2-26 13:21 编辑
我来回答您的问题 希望对您有帮助
所谓Dynamic Proxy是这样一种class: 它是在运行时生成的class,在生成它时你必须提供一组interface给它,
然后该class就宣称它实现了这些interface。你当然可以把该class的实例当作这些interface中的任何一个来用。
当然啦,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,
由它接管实际的工作。
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色有:
抽象角色:声明真实对象和代理对象的共同接口;
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
举个例子如下:
抽象角色:
abstract
public
class
Subject{
abstract
public
void
request();
}
真实角色:实现了Subject的request()方法。
public
class
RealSubject
extends
Subject{
public
RealSubject(){
}
public
void
request() {
System.out.println(
"From real subject."
);
}
}
代理角色:
public
class
ProxySubject
extends
Subject {
private
RealSubject realSubject;
//以真实角色作为代理角色的属性
public
ProxySubject() { }
public
void
request(){
//该方法封装了真实对象的request方法
preRequest();
if
( realSubject ==
null
){
realSubject =
new
RealSubject();
}
realSubject.request();
//此处执行真实对象的request方法
postRequest();
}
private
void
preRequest(){
//something you want to do before requesting
}
private
void
postRequest(){
//something you want to do after requesting
}
}
客户端调用:
Subject sub=
new
ProxySubject();
Sub.request();
由以上代码可以看出,客户实际需要调用的是RealSubject类的request()方法,现在用ProxySubject来代理RealSubject类,同样达到目的,同时还封装了其他方法(preRequest(),postRequest()),可以处理一些其他问题
作者:
yangfengxiao
时间:
2013-2-26 21:03
王文正 发表于 2013-2-26 13:17
我来回答您的问题 希望对您有帮助
所谓Dynamic Proxy是这样一种class: 它是在运行时生成的class,在生成它 ...
谢谢!!!
作者:
Benwolf0818
时间:
2013-2-26 21:20
所谓Dynamic Proxy是这样一种class:
它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然啦,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2