代理模式

来源:互联网 发布:淘宝上的绫致时装 编辑:程序博客网 时间:2024/05/17 21:40

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

静态代理模式
这里写图片描述

动态代理模式

/** * 明星抽象接口 *  1.抽取真实明星类的公共方法 * @author zhangjianbin * */public interface Star {    /**     * 面谈     */    void confer();    /**     * 唱歌     */    void sing();    /**     * 收钱     */    void cdlodMoney();}
//真实明星public class RealStar implements Star {    @Override    public void confer() {        System.err.println("于真实明星面谈");    }    @Override    public void sing() {        System.out.println("真实明星唱歌");    }    @Override    public void cdlodMoney() {        System.err.println("真实明星收钱");    }}
/** * 处理器对象 *  实现对真实角色的访问 * @author zhangjianbin * */public class StarHand implements InvocationHandler {    private Star star;    //参收真实的调用对象    public StarHand(Star realStar){        this.star = realStar;    }    /**     * 动态产生的代理对象都要调用这个方法     * 参数:     *  Object proxy 代理对象     *  Method method 正在调用的方法     *  Object[] args 调用方法的参数     */    @Override    public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {        //调用方法的返回值        Object obj = null;        //前处理        System.err.println("前处理:面谈");        if(method.getName().equals("sing")){            //真实对象的方法            obj = method.invoke(star, args);        }           //后处理        System.out.println("后处理:收钱");           return obj;    }}
    public static void main(String[] args) {        //真实对象        RealStar realStar = new RealStar();        //处理对象        StarHand starHand = new StarHand(realStar);        //动态生成代理对象        Star star = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class},starHand);        //通过代理对象调用真实对象的方法        star.sing();    }
0 0
原创粉丝点击