设计模式-代理模式 为其它对象提供一种代理已控制对这个对象的访问 虚代理:根据需要来创建开销很大的对象 (懒加载) 远程代理:用不同地址空间上代表同意对象 保护代理:控制对原始对象的访问 例如订单创建之后,只有创建者可以对订单进行修改。 代理 在调用真实的对象前后可做权限校验等等。 代理模式的本质:控制对象访问 代理模式和适配器模式 都是为另一个对象提供间接性访问的,适配器主要解决接口之间不匹配的问题,代理模式则是实现和目标对象相同的接口。 来个UML图:
以下是一个屏蔽要访问对象的代理例子,例子很简单,主要是它的思路。
订单类接口:
/**
* 订单类
*/
public interface IOrder {
/**
* 获取订单的信息
*/
void getOrderMsg();
/**
* 编辑订单
*/
void editOrderMsg();
}
订单实现类:
public class OrderImpl implements IOrder {
@Override
public void getOrderMsg() {
System.out.println("获取订单成功");
}
@Override
public void editOrderMsg() {
System.out.println("编辑订单成功");
}
}
代理类:
/**
* 保护代理
*/
public class OrderProxy implements IOrder {
OrderImpl order;
public OrderProxy(OrderImpl iOrder){
this.order = iOrder;
}
@Override
public void getOrderMsg() {
System.out.println("可以有权限访问");
order.getOrderMsg();
System.out.println("XXX 在 xxx 时候 对订单进行了访问");
}
@Override
public void editOrderMsg() {
int v = new Random().nextInt(10);
if(v%2==0){
System.out.println("你没有权限,不能进行编辑");
return;
}
System.out.println("你有权限进行编辑");
order.editOrderMsg();
System.out.println("XXX 在 xxx 时候 对订单进行了编辑");
}
}
来个测试:
public static void main(String[] args) {
IOrder order = new OrderProxy(new OrderImpl());
order.getOrderMsg();
System.out.println();
order.editOrderMsg();
}
测试结果:
可以有权限访问
获取订单成功
XXX 在 xxx 时候 对订单进行了访问
你有权限进行编辑
编辑订单成功
XXX 在 xxx 时候 对订单进行了编辑
因为我采用的随机数,测试结果也可能为:
可以有权限访问
获取订单成功
XXX 在 xxx 时候 对订单进行了访问
你没有权限,不能进行编辑
以上就是例子。
设计模式是种思维。