java代理模式

java代理模式

ID:43327992

大小:82.50 KB

页数:25页

时间:2019-10-08

java代理模式_第1页
java代理模式_第2页
java代理模式_第3页
java代理模式_第4页
java代理模式_第5页
资源描述:

《java代理模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java代理模式什么叫代理?网络中有各种各样的代理,比如我们上网有时候用代理服务器。你通过这样上网就是使用了代理上网。再举个通俗的例子,你想找某局长帮你做一件事情,但局长官位显赫,你又不能轻易见着,你就想到了找他的秘书,通过她传话给局长,这样你就等于请他的秘书帮你办成了那件事。分析秘书为什么就可以找到局长呢,因为秘书和局长之间有一定的关系。这里产生了四个对象:秘书、你、局长、秘书-局长(关系)。作用代理模式的作用是:为其他对象(局长)提供一种代理(秘书)以控制对这个对象(局长)的访问。代理对象可以

2、在客户端(你)和目标对象(局长)之间起到中介的作用。Java中代理模式涉及的角色1.抽象角色(秘书-局长):声明真实对象和代理对象的共同接口(秘书-局长)2.代理角色(秘书):代理对象角色(秘书)内部含有对真实对象(局长)的引用,从而可以操作真实对象(局长),同时代理对象(秘书)提供与真实对象(局长)相同的接口(秘书-局长)以便在任何时刻都能代替真实对象(局长)。同时,代理对象(秘书)可以在执行真实对象(局长)操作时,附加其他的操作,相当于对真实对象(局长)进行封装3.真实角色(局长):代理角色(

3、秘书)所代表的真实对象(局长),是我们最终要引用的对象(局长)代码(关系)(1)Subject.java(关系)packagecom.pjwqh.proxyTest;//抽象角色abstractpublicclassSubject{abstractpublicvoidrequest();}代码(局长)(2)RealSubject.java(局长)packagecom.pjwqh.proxyTest;//真实角色:实现了Subject的request()方法publicclassRealSubjec

4、textendsSubject{publicRealSubject(){}publicvoidrequest(){System.out.println("我是局长,哈哈");}}代码(秘书)(3)ProxySubject.java(秘书)packagecom.pjwqh.proxyTest;//代理角色publicclassProxySubjectextendsSubject{privateRealSubjectrealSubject;//以真实角色作为代理角色的属性publicProxySubj

5、ect(){}publicvoidrequest()//该方法封装了真实对象的request方法{preRequest();if(realSubject==null){realSubject=newRealSubject();}realSubject.request();//此处执行真实对象的request方法postRequest();}privatevoidpreRequest(){//somethingyouwanttodobeforerequesting}privatevoidpostRe

6、quest(){//somethingyouwanttodoafterrequesting}}代码(你)(4)Client.java(你)packagecom.pjwqh.proxyTest;//客户端调用publicclassClient{publicstaticvoidmain(String[]args){//你直接找(秘书)Subjectsub=newProxySubject();sub.request();}}运行结果运行输出了“我是局长,哈哈”这说明我们通过代理对象(秘书)成功调用了被代

7、理对象(局长)的方法。由以上代码可以看出,客户实际需要调用的是RealSubject类的request()方法,现在用ProxySubject来代理RealSubject类,同样达到目的,同时还封装了其他方法(preRequest(),postRequest()),可以处理一些其他问题。问题?如果要按照上述的方法使用代理模式,那么真实角色必须是事先已经存在的,并将其作为代理对象的内部属性。但是实际使用时,一个真实角色必须对应一个代理角色,如果大量使用会导致类的急剧膨胀;此外,如果事先并不知道真实角

8、色,该如何使用代理呢?Java的动态代理类这个问题可以通过Java的动态代理类来解决Java动态代理类位于java.lang.reflect包下,一般主要涉及到以下两个类:(1)InterfaceInvocationHandler(2)ProxyInterfaceInvocationHandler该接口中仅定义了一个方法publicobjectinvoke(Objectobj,Methodmethod,Object[]args)在实际使用时,第一个参数obj一般是指代理类第一个参数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。