设计模式之动态代理

JDK动态代理:

public interface Subject {
    public void shopping();
}

 

public class Person implements Subject {
    @Override
    public void shopping() {
        System.out.println("付款,买到心仪的比基尼");
    }
}

 

/**
 * 用于动态生成一个代理的对象
 */
public class CreateProxy implements InvocationHandler {
    private Object target;//被代理的对象

    //用于创建代理对象的方法
    public Object create(Object target) {
        this.target = target;
        //target.getClass().getClassLoader()  获取target类的类加载器
        Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        return proxy;
    }

    /**
     * 代理对象要执行的方法
     * @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(target, args);
        System.out.println("完成本次海淘");
        return null;
    }
}

 

测试:

  @Test
    void test1() {
        CreateProxy createProxy = new CreateProxy();//创建代理对象的对象
        Subject person = new Person();
        Subject subject = (Subject)createProxy.create(person);
        subject.shopping();
    }

 

posted @ 2023-02-21 23:04  曹伟666  阅读(12)  评论(0编辑  收藏  举报