Java模式設計之單例模式(三)
一個實用的例子:屬性管理器
什么是屬性文件
這里給出一個讀取屬性(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 屬性和屬性文件的操作。這個屬性類的繼承關系可以從下面的類圖中看清楚。

屬性類提供了讀取屬性和設置屬性的各種方法。其中讀取屬性的方法有:
.. 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) ,將當前的屬性列寫入一個輸出流,如果這個輸出流是導向一個文件的,那么這個方法就將屬性流存入文件。