快速业务通道

Java设计模式之计数代理模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

Java设计模式之计数代理模式

时间:2010-09-22

描述:

计数代理模式在客户对象调用服务提供者对象上方法的前后执行诸如日志(logging)和计数(counting)一系列附加功能时很有用。计数代理模式建议把这些附加功能封装在一个单独的对象,这个对象就是指计数代理对象,而不是把这些附加的功能实现放到服务提供者的内部。良好的对象设计的一个特征就是对象要专注于提供特定的功能。换句话说,理想的对象不应该做各种不相干的事情。把诸如日志(logging)和计数(counting)等类似的功能封装为一个单独的对象,而让服务提供者对象仅提供它自己的特定功能。也就是说,只允许服务提供者对象执行定义良好、特定的任务。

计数代理被设计成可以被客户访问的与服务提供者具有相同接口的对象。客户对象不是直接访问服务提供者,而是调用计数代理对象上的方法,计数代理执行必要的纪录日志(logging)和计数(counting)功能后,再把方法调用传递给服务提供着对象。如图1

Figure1: Generic Class Association When the Counting Proxy Pattern Is Applied

下面的例子说明了如何在应用程序中利用计数代理。

例子:

让我们设计一个Order类,类层次如图2,OrderIF接口声明了getAllOrders读取数据库中所有订单的简单方法。

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; } }

Java设计模式之计数代理模式(2)

时间:2010-09-22

让我们假定在调用getAllOrders()时,需要把取数据文件所花费的时间和记录条数要记录的log日志文件中。

这个附加的功能可以设计一个单独的OrderProxy类来实现,它与真实对象Order一样实现OrderIF接口。这样保证了OrderProxy对象提供给客户与真实对象Order一样的接口。如图3

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(); } }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号