首页 > 其他 > 详细

设计模式---代理模式

时间:2019-11-09 21:51:41      阅读:73      评论:0      收藏:0      [点我收藏+]

动态代理模式
通过代理类,接口和实现类之间可以不直接发生关系,而是在运行实现动态关联。

public interface Subject {
    public void shopping();
}
public class Person implements Subject {
    @Override
    public void shopping() {
        System.out.println("XX商品购买成功");
    }
}

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

// 用于动态生成代理对象
public class Proxy  implements InvocationHandler {

    private Object targect; //被代理对象

    /**
     *用于创建代理对象
     * @param targect 被代理对象
     * @return
     */
    public  Object  creact(Object targect){
        this.targect = targect;
        // 创建代理对象的实例
        /**
         * 参数1:类加载器
         * 参数2:接口
         * 参数3:创建代理类的对象(当前类Proxy)
         */
       return  java.lang.reflect.Proxy.newProxyInstance(targect.getClass().getClassLoader(),
                targect.getClass().getInterfaces(),this);
    }

    /**
     * 代理对象要执行的方法
     * @param proxy 代理类对象
     * @param method 被代理对象的方法
     * @param args  被代理对象方法的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("代购已找到商品");
        System.out.println("");
        method.invoke(targect,args);
        System.out.println("交易结束");
        return null;
    }
}
public class Test {
    public static void main(String[] args) {
        Proxy p = new Proxy();
        Subject  person = new Person();
        Subject proxy = (Subject)p.creact(person);
        proxy.shopping();
    }
}

设计模式---代理模式

原文:https://www.cnblogs.com/VVII/p/11823773.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!