代理模式

markdwon ## 代理模式释义 ```text 通过一个代理将对象包装起来,然后用该代理取代原始对象,任何对原始对象 的调用都要通过代理 最好通过一个代理类完成全部的代理功能 ``` ## 代码示例 ### 动态代理 ```text import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyTest { public static void main(String[] args) { SubFactory subFactory = new SubFactory(); Factory proxyFactory = (Factory)ProxyFactory.getProxyFactory(subFactory); proxyFactory.produce(); } } class ProxyFactory { public static Object getProxyFactory(Object object){ Invocation invocation = new Invocation(); invocation.bind(object); return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),invocation); } } class SubFactory implements Factory{ @Override public void produce() { System.out.println("sub 生产产品"); } } class Invocation implements InvocationHandler{ private Object object; public void bind(Object o){ this.object = o; } @Override public Object invoke(Object o, Method method, Object[] objects) throws Throwable { o = this.object; return method.invoke(o,objects); } } interface Factory { void produce(); } ``` ### 静态代理 ```text public class ProxyTest { public static void main(String[] args) { SubFactory subFactory = new SubFactory(); ProxyFactory proxyFactory = new ProxyFactory(subFactory); proxyFactory.produce(); } } class ProxyFactory implements Factory { private Factory factory; public ProxyFactory(Factory factory){ this.factory = factory; } @Override public void produce() { System.out.println("生产产品"); factory.produce(); } } class SubFactory implements Factory{ @Override public void produce() { System.out.println("sub 生产产品"); } } interface Factory { void produce(); } ```

评论