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

代理模式 - Proxy Pattern

  • 在代理模式(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();
}

输出

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

你可能感兴趣的:(Java23种设计模式之结构型模式「代理模式」)