- 定义
为另一个对象提供一个替身或占位符以控制对这个对象的访问 - 说明
使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。 代码实例
/** * 统计类的方法执行时间,要求,不修改原有的方法。 */ interface IFoo { void foo(); } class DoFoo implements IFoo { @Override public void foo() { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } } class TimeCountInvocationHandler implements InvocationHandler { private DoFoo doFoo; public TimeCountInvocationHandler(DoFoo doFoo) { this.doFoo = doFoo; } // 方法代理 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long start = System.nanoTime(); method.invoke(doFoo, args); long end = System.nanoTime(); System.out.println(end - start); return null; } } class TimeCounter { private IFoo doFoo = getIFooProxy(new DoFoo()); // 获取动态代理类 public IFoo getIFooProxy(DoFoo doFoo) { return (IFoo) Proxy.newProxyInstance(doFoo.getClass().getClassLoader(), doFoo.getClass().getInterfaces(), new TimeCountInvocationHandler(doFoo)); } public IFoo getDoFoo() { return doFoo; } public static void main(String[] args) { IFoo doFoo = new TimeCounter().getDoFoo(); doFoo.foo(); } }
转载于:https://www.cnblogs.com/bosslv/p/11358147.html