快速业务通道

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

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

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

时间:2010-12-14

一个实用的例子:属性管理器

什么是属性文件

这里给出一个读取属性(properties) 文件的单例类,作为单例模式的一个实用的例子。属性文件如同老式的视窗编程时的.ini 文件,用于存放系统的配置信息。配置信息在属性文件中以属性的方式存放,一个属性就是两个字符串组成的对子,其中一个字符串是键(key),另一个字符串是这个键的值(value)。

大多数的系统都有一些配置常量,这些常量如果是存储在程序内部的,那么每一次修改这些常量都需要重新编译程序。将这些常量放在配置文件中,系统通过访问这个配置文件取得配置常量,就可以通过修改配置文件而无需修改程序而达到更改系统配置的目的。系统也可以在配置文件中存储一些工作环境信息,这样在系统重启时,这些工作信息可以延续到下一个运行周期中。

假定需要读取的属性文件就在当前目录中,且文件名为singleton.properties 。这个文件中有如下的一些属性项。

代码清单5:属性文件内容

node1.item1=How node1.item2=are node2.item1=you node2.item2=doing node3.item1=?

例如,node1.item1 就是一个键,而How 就是这个键所对应的值。

Java 属性类

Java 提供了一个工具类,称做属性类,可以用来完成Java 属性和属性文件的操作。这个属性类的继承关系可以从下面的类图中看清楚。

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

属性类提供了读取属性和设置属性的各种方法。其中读取属性的方法有:

.. contains(Object value) 、containsKey(Object key): 如果给定的参数或属性关键字在属性表中有定义,该方法返回True ,否则返回False。

.. getProperty(String key)、getProperty(String key, String default) :根据给定的属性关键字获取关键字值。

.. list(PrintStream s) 、list(PrintWriter w) :在输出流中输出属性表内容。

.. size():返回当前属性表中定义的属性关键字个数。

设置属性的方法有:

.. put(Object key, Object value) :向属性表中追加属性关键字和关键字的值。

.. remove(Object key):从属性表中删除关键字。

从属性文件加载属性的方法为load(InputStream inStream),可以从一个输入流中读入一个属性列,如果这个流是来自一个文件的话,这个方法就从文件中读入属性。

将属性存入属性文件的方法有几个,重要的一个是store(OutputStream out, String header) ,将当前的属性列写入一个输出流,如果这个输出流是导向一个文件的,那么这个方法就将属性流存入文件。

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

时间:2010-12-14

为什么需要使用单例模式

属性是系统的一种"资源",应当避免有多余一个的对象读取特别是存储属性。此外,属性的读取可能会在很多地方发生,创建属性对象的地方应当在哪里不是很清楚。换言之,属性管理器应当自己创建自己的实例,并且自己向系统全程提供这一事例。因此,属性文件管理器应当是一个单例模式负责。

系统设计

系统的核心是一个属性管理器,也就是一个叫做ConfigManager 的类,这个类应当是一个单例类。因此,这个类应当有一个静态工厂方法,不妨叫做getInstance(),用于提供自己的实例。

为简单起见,本文在这里采取"饿汉"方式实现ConfigManager 。例子的类图如下所示。

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

本例子的源代码如下所示。

代码清单6:ConfigManager 的源代码

import java.util.Properties; import java.io.FileInputStream; import java.io.File; public class ConfigManager { /** * 属性文件全名 */ private static final String PFILE = System.getProperty("user.dir") + File.Separator + "Singleton.properties"; /** * 对应于属性文件的文件对象变量 */ private Fil

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