代码改变世界

代理模式(Proxy)

2015-08-24 17:52  你吃不吃麦芽糖  阅读(193)  评论(0)    收藏  举报

代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。

代理模式的一个极其简单的例子,但是它具有代理模式所要求的功能,设计师可以使用这个例子作为蓝本,在一个Vector(或者任何其他对象)被调用之前和之后做出有意义的操作。实现代码如下:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.util.*;
class VectorProxy implements InvocationHandler
{
    private Object proxyobj;
    public VectorProxy(Object obj)
    {
        this.proxyobj = obj;
    }
    public static Object factory(Object obj)
    {
        Class cls = obj.getClass();
        return Proxy.newProxyInstance(cls.getClassLoader(),
                cls.getInterfaces(),
                new VectorProxy(obj));
    }
    public Object invoke(Object proxy,Method method,Object[] args) throws Exception
    {
        System.out.println("before calling " + method);
        if(args != null)
        {
            for(int i=0;i<args.length;i++)
            {
                System.out.println(args[i] + "");
            }
        }
        Object o = method.invoke(proxyobj,args);
        System.out.println("after calling " + method);
        return o;
    }
    public static void main(String[] args) throws Exception
    {
        List v = null;
        v = (List)factory(new ArrayList());
        v.add("New");
        v.add("York");
    }
}