动态代理模式的角色:
--抽象角色:是真实对象和代理对象的公共接口 --代理角色:对真实对象进行封装,可以操作真实对象 --真实角色:依赖代理角色,代理真正操纵的类
--抽象角色:是真实对象和代理对象的公共接口
--代理角色:对真实对象进行封装,可以操作真实对象
--真实角色:依赖代理角色,代理真正操纵的类
抽象角色:
subject.java
package com.wansha.proxy; public interface Subject { public void request(); } 真实角色:
Subject1.java
package com.wansha.proxy; public class Subject1 implements Subject { @Override public void request() { System.out.println("Subject1"); } } Subject2.java
package com.wansha.proxy; public class Subject2 implements Subject { @Override public 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(){ } @Override public 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(); } }
您还没有登录,请您登录后再发表评论
评论