设计模式:计数代理、聚合强制器与显式对象释放
1. 计数代理(Counting Proxy)
1.1 描述
计数代理模式在设计额外操作(如日志记录和计数)时非常有用,这些操作需要在客户端对象调用服务提供者对象的方法之前和/或之后执行。该模式建议将这些额外功能封装在一个单独的对象中,即计数代理,而不是将其实现放在服务提供者对象内部。设计良好的对象应具有专注的功能,将日志记录、计数等功能封装到单独的对象中,可使服务提供者对象仅执行其设计的功能。
计数代理被设计为具有与客户端访问的服务提供者对象相同的接口。客户端对象不直接访问服务提供者对象,而是调用计数代理的方法。代理执行所需的日志记录和计数操作,并将方法调用转发给服务提供者对象。
1.2 示例
以下是一个订单类层次结构的示例,展示了计数代理的使用:
// 定义订单接口
public interface OrderIF {
public Vector getAllOrders();
}
// 实现订单接口的 Order 类
public class Order implements OrderIF {
public Vector getAllOrders() {
FileUtil fileUtil = new FileUtil();
Vector v = fileUtil.fileToVector("orders.txt");
return v;
}
}
// 实现订单接口的 OrderProxy 类,作为计数代理
public class