动态代理模式

来源:互联网 发布:java调用http上传文件 编辑:程序博客网 时间:2024/06/05 09:35

动态代理模式的角色:

--抽象角色:是真实对象和代理对象的公共接口

--代理角色:对真实对象进行封装,可以操作真实对象

--真实角色:依赖代理角色,代理真正操纵的类



抽象角色:

subject.java

package com.wansha.proxy;public interface Subject {public void request();}

真实角色:

Subject1.java

package com.wansha.proxy;public class Subject1 implements Subject {@Overridepublic void request() {System.out.println("Subject1");}}

Subject2.java

package com.wansha.proxy;public class Subject2 implements Subject {@Overridepublic void request() {System.out.println("Subject2");}}

生成代理角色的实现类

ProxySubject.java


package com.wansha.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxySubject implements InvocationHandler {private Object obj;public ProxySubject(Object obj){this.obj = obj;}public ProxySubject(){}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("代理方法执行之前");method.invoke(obj,args);System.out.println("代理方法执行之后");return null;}public void setObj(Object obj) {this.obj = obj;}public Object getfactory()throws Exception{if(obj == null){throw new Exception("没有目标对象");}return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),new ProxySubject(obj));//生成代理角色}}

客户端:

Client.java

package com.wansha.proxy;import java.lang.reflect.Proxy;public class Client {public static void main(String[] args) throws Exception{realSubject real = new  realSubject();Subject1 real1 = new  Subject1();Subject2 real2 = new  Subject2();ProxySubject proSub= new ProxySubject();proSub.setObj(real);Subject sub = (Subject)proSub.getfactory();sub.request();}}


原创粉丝点击