Figure2: Order Class Hierarchy
public interface OrderIF { public Vector getAllOrders(); } 作为getAllOrders方法实现的一部分,Order类实用了FileUtil工具类从order.txt文件中读取订单项。
public class Order implements OrderIF { public Vector getAllOrders() { FileUtil fileUtil = new FileUtil(); Vector v = fileUtil.fileToVector("orders.txt"); return v; } } 让我们假定在调用getAllOrders()时,需要把取数据文件所花费的时间和记录条数要记录的log日志文件中。
Figure3: Order Class Hierarchy with the Counting Proxy
public class OrderProxy implements OrderIF { private int counter = 0; public Vector getAllOrders() { Order order = new Order(); counter++; long t1 = System.currentTimeMillis (); Vector v = order.getAllOrders(); long t2 = System.currentTimeMillis(); long timeDiff = t2 ? t1; String msg = "Iteration=" + counter + "::Time=" + timeDiff + "ms"; //log the message FileUtil fileUtil = new FileUtil(); fileUtil.writeToFile("log.txt”,msg, true, true); return v; } } 客户对象MainApp就想调用真实对象Order一样调用OrderProxy对象上的getAllOrders()方法,OrderProxy对象传递这个调用给真实对象Order,计算读取所有订单所花费的时间并使用FileUtil帮助类将其纪录的log日志文件中。在这个过程中,OrderProxy扮演者计数代理的角色。
public class MainApp { public static void main(String[] args) { OrderIF order = new OrderProxy(); Vector v = order.getAllOrders(); v = order.getAllOrders(); v = order.getAllOrders(); v = order.getAllOrders(); } } 编辑推荐《Java与模式》作者:阎宏专区