Java23种设计模式之结构型模式「代理模式」

2020-07-29  本文已影响0人  MrLimLee

代理模式 - Proxy Pattern

目前有一个现有的业务逻辑 并 有实现逻辑

public interface Product {
    void createProduct();
}

public class ProductLevel implements Product {
    @Override
    public void createProduct() {
        System.out.println("创建一个项目");
    }
}

定义一个动态代理类

public class JDKDynamicProxy implements InvocationHandler {

    /**
     * 声明被代理的对象
     */

    private Product product;

    public JDKDynamicProxy(Product product) {
        this.product = product;
    }

    public Object getTarget() {
        return Proxy.newProxyInstance(product.getClass().getClassLoader(), product.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("增加执行代理对象之前的逻辑");
        method.invoke(product, args);
        System.out.println("增加执行代理对象之后的逻辑");
        return null;
    }
}

调用

public static void main(String[] args) {
    System.out.println("不使用代理模式");
    Product product = new ProductLevel();
    product.createProduct();

    System.out.println("---------------------");

    System.out.println("使用代理模式");
    Product proxy = (Product) new JDKDynamicProxy(new ProductLevel()).getTarget();
    proxy.createProduct();
}

输出

不使用代理模式
创建一个项目
---------------------
使用代理模式
增加执行代理对象之前的逻辑
创建一个项目
增加执行代理对象之后的逻辑
上一篇 下一篇

猜你喜欢

热点阅读