设计模式之动态代理

动态代理相对于静态代理,代理类无需因为委托类儿变更,下面为动态代理的代理类。

动态代理也分为3部分:接口类、委托类(实现类)、代理类。

public class DynamicProxy implements InvocationHandler {

private Object realObject;
public Object getProxy(Object realObject) {
    this.realObject = realObject;
    Object proxyObject = Proxy.newProxyInstance(
            realObject.getClass().getClassLoader(),
            realObject.getClass().getInterfaces(),
            this
    );
    return proxyObject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    long start = System.currentTimeMillis();
    Object result = method.invoke(realObject, args);
    System.out.println("耗时:" + (System.currentTimeMillis() - start));
    return result;
}


public static void main(String[] args){
    IWater water = new River();
    IWater result = (IWater) new DynamicProxy().getProxy(water);
    result.flow();
}

}