设计模式之代理模式

107 阅读1分钟

应用场景

使用代理模式的主要目的:

  1. 保护目标对象

  2. 增强目标对象

静态代理

// 顶级接口
public interface IOrderSerivce() {
	int createOrder(Order order);
}

// 接口实现类
public class OrderService Implements IOrderService {
	int createOrder(Order order) {
    	// 具体逻辑
    }
}

// 代理类
// 通过实现顶级接口来增加方法
public class OrderServiceStaticProxy implements IOrderService {
	private IOrderSerivce orderService;
    
    public OrderServiceStaticProxy(IOrderService orderService) {
    	this.orderService = orderService;
    }
    
    public int createOrdr(Order order) {
    	// do something
        orderService.create(order);
        // do something
    }
    
}

// 使用
IOrderService orderService = new OrderServiceStaticProxy(new OrderService());
orderService.create(order);

动态代理

public class MyProxy Implements InvationHandler {
	private Object target;
    
    public Object getInstance(Object object) throws Exception {
    	this.target = target;
        Class<?> clazz = target.getClass();
        return Proxy.getProxyInstance(clazz.getClassLoader(), clazz.getInterface(), this);
    }
    
    public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
    	before();
        Object obj = method.invoke(this.target, args);
        after();
        return obj;
    }
    
}