代理模式 - 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();
}
输出
不使用代理模式
创建一个项目
---------------------
使用代理模式
增加执行代理对象之前的逻辑
创建一个项目
增加执行代理对象之后的逻辑