java 代理模式(静态代理+动态代理)
2012-11-20 15:22
459 查看
静态代理:
ISubject:
RealSubject(真实角色):
ProxySubject(代理类):
Test(客户端测试):
------------------------------------------------------------------------------------------------------------------------------
动态代理:
ISubject:
RealSubject:
SubjectInvocationHandler(调用处理类):
Test:
ISubject:
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午1:49:29 */ public interface ISubject { public void request(); }
RealSubject(真实角色):
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午1:51:37 */ public class RealSubject implements ISubject{ @Override public void request() { System.out.println("realSubject requesting"); } }
ProxySubject(代理类):
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午1:52:22 */ public class ProxySubject implements ISubject{ private RealSubject realSubject; public ProxySubject() { realSubject = new RealSubject(); } @Override public void request() { System.out.println("do something before"); realSubject.request(); System.out.println("do something after"); } }
Test(客户端测试):
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午1:54:47 */ public class Test { public static void main(String[] args) { ISubject proxySubject = new ProxySubject(); proxySubject.request(); } }
------------------------------------------------------------------------------------------------------------------------------
动态代理:
ISubject:
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午2:51:31 */ public interface ISubject { public void request(); }
RealSubject:
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午2:52:00 */ public class RealSubject implements ISubject{ @Override public void request() { System.out.println("realSubject requesting"); } }
SubjectInvocationHandler(调用处理类):
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午2:54:38 * 调用处理类 */ public class SubjectInvocationHandler implements InvocationHandler{ private Object obj; public SubjectInvocationHandler(Object obj) { this.obj = obj; } /** * 生成代理类工厂 * @author com.tiantian * @param realObj * @return 返回生成的代理类 */ public static Object getProxyInstanceFactory(Object realObj){ Class<?> classType = realObj.getClass(); return Proxy.newProxyInstance(classType.getClassLoader(), classType.getInterfaces(), new SubjectInvocationHandler(realObj)); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"); method.invoke(obj, args); System.out.println("after"); return null; } }
Test:
/** * @author com.tiantian * @version 创建时间:2012-11-20 下午2:56:25 */ public class Test { public static void main(String[] args) { RealSubject realSubject = new RealSubject(); // InvocationHandler handler = new SubjectInvocationHandler(realSubject); // ISubject subject = (ISubject)Proxy.newProxyInstance(realSubject.getClass().getClassLoader(), // realSubject.getClass().getInterfaces(), handler); ISubject subject = (ISubject)SubjectInvocationHandler.getProxyInstanceFactory(realSubject); subject.request(); } }
相关文章推荐
- java 代理模式 静态代理和动态代理
- Java设计模式学习06——静态代理与动态代理
- JAVA的代理模式(静态代理、JDK动态代理、cglib动态代理)
- Java设计模式学习06——静态代理与动态代理
- JAVA-三种代理模式(静态、动态、子类/Cglib代理)
- java设计模式之四:代理模式 java静态代理和动态代理
- java 静态代理与动态代理(代理模式)
- Java设计模式之 静态代理和动态代理
- java设计模式之代理模式 (静态&动态)
- Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- java的代理模式(动态代理和静态代理)
- Java之静态代理和动态代理模式
- java设计模式--代理模式(静态代理和动态代理)
- java中的静态和动态代理模式
- Java 设计模式——静态代理模式和动态代理模式
- java,代理模式(静态代理,动态代理)
- JAVA 设计模式:静态代理VS动态代理
- 代理设计模式之(静态代理+Java自身提供的动态代理机制)
- java的代理模式(静态和动态代理)