代理模式通用模板实现
2016-11-08 21:07
246 查看
代理模式
造代理对象的工具类:
演示的代码:
实现类:
造代理对象的工具类:
package cn.hncu.proxy.util; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyUtils implements InvocationHandler{ private Object obj=null; public ProxyUtils(Object obj){ this.obj = obj; } public static Object getProxy( Object obj){ Object newObj = Proxy.newProxyInstance( ProxyUtils.class.getClassLoader(), obj.getClass().getInterfaces(), new ProxyUtils(obj)); //构造传参 return newObj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(a!=null){ a.before(); } System.out.println("前面拦拦:"+method.getName()); Object returnObj = method.invoke(obj, args); System.out.println("后面拦拦:"+method.getName()); if(a!=null){ a.after(); } return returnObj; } ////////////////////////// public Object getProxy( ){ Object newObj = Proxy.newProxyInstance( ProxyUtils.class.getClassLoader(), obj.getClass().getInterfaces(), this); return newObj; } private A a; public void addXXXListener( A a ){ this.a = a; } } interface A { public void before(); public void after(); }
演示的代码:
package cn.hncu.proxy.util; public class Dog implements IDog { private String name; public Dog() { this.name = "小布丁"; } @Override public void run(){ System.out.println(name+" 正在跑..."); } }
package cn.hncu.proxy.util; public interface IDog { public abstract void run(); }
package cn.hncu.proxy.util; public class Person implements IPerson { private String name; public Person(String name) { this.name = name; } /* (non-Javadoc) * @see cn.hncu.proxy.util.IPerson#sayHello() */ @Override public void sayHello(){ System.out.println("My Name is: "+name); } }
package cn.hncu.proxy.util; public interface IPerson { public abstract void sayHello(); }
实现类:
package cn.hncu.proxy.util; import org.junit.Test; public class Client { @Test public void test(){ Person p = new Person("张三"); IPerson p2= (IPerson) ProxyUtils.getProxy(p); p2.sayHello(); Dog dog = new Dog(); IDog d2 = (IDog) ProxyUtils.getProxy(dog); d2.run(); } @Test//引入监听者模式 public void test2(){ Person p = new Person("张三"); ProxyUtils proxy = new ProxyUtils( p ); proxy.addXXXListener(new A() { @Override public void before() { System.out.println("你好,帮你设置编码"); } @Override public void after() { System.out.println("再见,资源收回来"); } }); IPerson p2= (IPerson) proxy.getProxy(); p2.sayHello(); } }
相关文章推荐
- C++模板实现的通用工厂方法模式
- 模板实现的通用工厂方法模式
- JAVA 代理模式之通用接口/继承的实现方式
- C++模板实现的通用工厂方法模式
- (原创)c++11改进我们的模式之改进代理模式,实现通用的AOP框架
- C++模板实现的通用工厂方法模式
- C++模板实现的通用工厂方法模式
- 代理模式的实现 接口编程
- [转贴] 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)
- 模板方法模式实现探讨
- J2EE中几种业务代理模式的实现和比较
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- ASP.net 中的页面继承实现和通用页面的工厂模式的实现
- C++设计模式:Singleton的模板实现之一
- Proxy模式1--JAVA中的代理实现
- 代理模式的实现 权限控制
- 设计模式---单件(C++版) 比较通用的单件模式(STL实现)
- C++实现网络服务器命令模式(设计及模板实现)
- 利用动态代理实现通用存储过程的调用
- 模板方法模式实现探讨