您的位置:首页 > 移动开发 > Objective-C

动态代理的实现2-编写可生成代理和插入通告的通用方法

2013-11-28 20:27 477 查看
[java] view
plaincopy

//一个通告或建议的接口  

public interface Advice {  

    void afterMethod(Method method);  

    void beforeMethod(Method method);  

}  

[java] view
plaincopy

public class MyAdvice implements Advice{  

    private long start;  

    @Override  

    public void afterMethod(Method method) {  

        System.out.println("运行时间计算结束!!");  

        System.out.println("共耗时:"+(System.currentTimeMillis()-start));  

        System.out.println("------------------------");  

    }  

    @Override  

    public void beforeMethod(Method method) {  

        System.out.println("开始计算运行时间:");  

        start=System.currentTimeMillis();  

        System.out.println("所执行的方法:"+method.getName());  

    }  

}  

[java] view
plaincopy

//编写可生成代理和插入通告的通用方法  

public class Test1 {  

    public static void main(String[] args) {  

        final List target=new ArrayList();  

        Collection coll = (Collection) getProxy(target,new MyAdvice());  

        coll.add("111");  

        coll.add("222");  

        coll.add("333");  

        System.out.println(coll.size());  

    }  

      

    //抽象出一个公共的方法  

    private static Object getProxy(final Object target,final Advice advice) {  

        Object coll=(Object) Proxy.newProxyInstance(  

                target.getClass().getClassLoader(),   

                target.getClass().getInterfaces(),   

                new InvocationHandler(){  

                    @Override  

                    public Object invoke(Object proxy, Method method,  

                            Object[] args) throws Throwable {  

                        advice.beforeMethod(method);  

                        Object obj=method.invoke(target, args);  

                        advice.afterMethod(method);  

                        return obj;  

                    }  

                });  

        return coll;  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 object