应用场景
使用代理模式的主要目的:
-
保护目标对象
-
增强目标对象
静态代理
// 顶级接口
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;
}
}