静态代理应用场景:自己不想做,想让别人帮忙做自己的事情,甚至想让别人做的更好
代理者和被代理者都需要实现接口,让代理者来做事情
public class MyProxyExt { interface IBuild{ void create(); } static class BuildImpl implements IBuild{ @Override public void create() { System.out.println("修建房子"); } } static class BuildProxy implements IBuild{ private BuildImpl build ; public BuildProxy(BuildImpl build) { this.build = build; } @Override public void create() { build.create(); System.out.println("修建泳池"); } } public static void main(String[] args) { IBuild build = new BuildProxy(new BuildImpl()) ; build.create(); } }动态代理
只有被代理对象实现接口
1.既然需要他人帮忙,那就要找到代理对象
2.其次就是要对方做事情,调用方法
解决这两个问题,分别需要Proxy和 InvocationHandler
public class MyProxy { interface IBuild{ void create(); } static class BuildImpl implements IBuild{ @Override public void create() { System.out.println("修建房子"); } } class BuildHandler implements InvocationHandler{ private Object object ; public BuildHandler(Object object) { this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return method.invoke(object,args) ; } } class BuildProxy { public Object getInstance(Object object){ BuildHandler buildHandler = new BuildHandler(object) ; return Proxy.newProxyInstance(object.getClass().getClassLoader() , object.getClass().getInterfaces(),buildHandler) ; } } }
测试
public class Test { public static void main(String[] args) { MyProxy.IBuild build = new MyProxy.BuildImpl(); MyProxy.IBuild buildProxy = (MyProxy.IBuild) new MyProxy(). new BuildProxy().getInstance(build); buildProxy.create(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)