设计模式---代理模式

六月ゝ 毕业季﹏ 提交于 2019-12-04 02:09:46

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

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();
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!