黑马程序员技术交流社区

标题: proxy代理模式的模板 [打印本页]

作者: rfshao    时间: 2019-6-21 14:08
标题: proxy代理模式的模板
//创建真实对象
        ComputerImpl computer = new ComputerImpl();

        //创建代理对象
        Computer proxy_computer =(Computer)Proxy.newProxyInstance(computer.getClass().getClassLoader(),
                computer.getClass().getInterfaces(), new InvocationHandler() {

                    public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {

                        //如果方法名等于想要加强的方法就对方法进行加强
                        if ("saleComputer".equals(method.getName())) {

                            //从args参数数组中获取要修改的参数并修改
                            double money = (double) args[0] * 1.1;

                            //用反射的方式执行方法
                            String s = (String) method.invoke(computer, money);

                            return s;
                            //如果不是要修改的方法,就按原参数执行
                        } else {
                            Object obj = method.invoke(computer, args);
                            System.out.println(obj);
                            return obj;
                        }

                    }
                });

        //用代理对象调用方法
        System.out.println(proxy_computer.saleComputer(5000));
//        System.out.println(proxy_computer.show() == null);
        proxy_computer.show();
        //用真是对象调用方法
        System.out.println(computer.saleComputer(5000));
        computer.show();

//另,getParameterMap()得到的map是被锁定的,不能更改里面的值,如果用proxy要更改,需另new一个map




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2