標籤:imp tproxy 模式 check handler res tin obj tcl
代理模式-JDK Proxy
使用JDK支援的代理模式, 動態代理
情境如下: 本文例子代理了ArrayList, 在ArrayList每次操作時, 在操作之前和之後都進行一些額外的操作.
ArrayListProxy類
這裡是代理的實現.
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class ArrayListProxy implements InvocationHandler { private Object proxy; public ArrayListProxy(Object obj) { this.proxy = obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Exception { System.out.println("before calling " + method); if (args != null) { for (Object arg : args) { System.out.println(arg); } } Object o = method.invoke(this.proxy, args); System.out.println("after calling " + method); return o; }}MyUtils類
封裝了Proxy.newProxyInstance()方法, 方便取得代理對象.
import java.lang.reflect.Proxy;public class MyUtils { public static Object getProxy(Object obj) { Class cls = obj.getClass(); return Proxy.newProxyInstance( cls.getClassLoader(), cls.getInterfaces(), new ArrayListProxy(obj) ); }} Main
在這裡進行運行測試
import java.util.ArrayList;import java.util.List;@SuppressWarnings("unchecked")public class Main { public static void main(String[] args) { List realList = new ArrayList<String>(10); List proxyList = (List) MyUtils.getProxy(realList); proxyList.add("New"); System.out.print("\n\n"); proxyList.add("York"); }}
代理模式-JDK Proxy(Java實現)