网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.AOP Benchmark.
.24点算法的java代码.
.类反射简化Struts应用程序的开发.
.NLpack-eclipse-SDK-3.0.x-win32.
.Java异常处理之陋习展播.
.在Eclipse 3.1中体验J2SE 5.0的新.
.Applet调用JavaScript函数.
.J2ME简单吗?.
.数据结构――栈、队列和树(Java).
.看java编程思想笔记(5-6).
.Java应用:编写高级JavaScript应.
.Java 6新更新 JRE环境和命令行开.
.利用WebLogic的POOL连接数据库.
.java中动态执行一段代码.
.Java从入门到精通之过程篇.
.一些非常有用的JAVA常用方法( 2).
.Java2下Applet数字签名具体实现方.
.JAVA:Filter编码器.
.Java多线程程序设计入门.
.浅析Java中常见的Date类的应用技.

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

发表日期:2008-1-5



  描述:

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

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

Java设计模式之计数代理模式
Figure1: Generic Class Association When the Counting Proxy Pattern Is Applied


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

  例子:

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

Java设计模式之计数代理模式
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日志文件中。

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

Java设计模式之计数代理模式
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 Swing之游戏设计(3) 人气:610
下一篇:J2EE编程起步 人气:469
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐