快速业务通道

Java模式设计之单例模式(三) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
e m_file = null; /** * 属性文件的最后修改日期 */ private long m_lastModifiedTime = 0; /** * 属性文件所对应的属性对象变量 */ private Properties m_props = null; /** * 本类可能存在的惟一的一个实例 */ private static ConfigManager m_instance = ·234·Java 与模式 new ConfigManager(); /** * 私有的构造子,用以保证外界无法直接实例化 */ private ConfigManager() { m_file = new File(PFILE); m_lastModifiedTime = m_file.lastModified(); if(m_lastModifiedTime == 0) { System.err.println(PFILE + " file does not exist!"); } m_props = new Properties(); try { m_props.load(new FileInputStream(PFILE)); } catch(Exception e) { e.printStackTrace(); } } /** * 静态工厂方法 * @return 返还ConfigManager 类的单一实例 */ synchronized public static ConfigManager getInstance() { return m_instance; } /** * 读取一特定的属性项 * * @param name 属性项的项名 * @param defaultVal 属性项的默认值 * @return 属性项的值(如此项存在),默认值(如此项不存在) */ final public Object getConfigItem( String name,Object defaultVal) { long newTime = m_file.lastModified(); // 检查属性文件是否被其他程序 // (多数情况是程序员手动)修改过 // 如果是,重新读取此文件 if(newTime == 0) { // 属性文件不存在 if(m_lastModifiedTime == 0) { System.err.println(PFILE + " file does not exist!"); } else { System.err.println(PFILE + " file was deleted!!"); } return defaultVal; } else if(newTime > m_lastModifiedTime) { // Get rid of the old properties m_props.clear(); try { m_props.load(new FileInputStream(PFILE)); } catch(Exception e) { e.printStackTrace(); } } m_lastModifiedTime = newTime; Object val = m_props.getProperty(name); if( val == null ) { return defaultVal; } else { return val; } } }

在上面直接使用了一个局域的常量储存储属性文件的路径。在实际的系统中,读者可以采取更灵活的方式将属性文件的路径传入。

读者可以看到,这个管理器类有一个很有意思的功能,即在每一次调用时,检查属性文件是否已经被更新过。如果确实已经被更新过的话,管理器会自动重新加载属性文件,从而保证管理器的内容与属性文件的内容总是一致的。

Java模式设计之单例模式(三)(3)

时间:2010-12-14

怎样调用属性管理器

下面的源代码演示了怎样调用ConfigManager 来读取属性文件。

代码清单7:怎样调用ConfigManager 类以读取属性文件

BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Type quit to quit"); do { System.out.print("Property item to read: "); String line = reader.readLine(); if(line.equals("quit")) { break; } System.out.println(ConfigManager.getInstance() .getConfigItem(line,"Not found.")); } while(true);

上面代码运行时的情况如下图所示。

Java模式设计之单例模式(三) - 编程入门网

感兴趣的读者可以参考阅读本书的"专题:XMLProperties 与适配器模式"一章,那里对使用Java 属性类和XML 文件格式做了有用的讨论。

Java 语言中的单例模式

Java 语言中就有很多的单例模式的应用实例,这里讨论比较有名的几个。

Java 的Runtime 对象

在Java 语言内部,java.lang.Runtime 对象就是一个使用单例模式的例子。在每一个Java 应用程序里面,都有惟一的一个Runtime 对象。通过这个Runtime 对象,应用程

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号