便利なコードパーツ集!

やまろうのプログラミングTips

Java

[Java] PropertiesをSingleton化する

投稿日:2016年12月6日 更新日:

2003/05/02

ども、GW.split("仕事");
でおなじみのやまろうです(怒)。

ゴールデンウィークが仕事で分割されたのを
Javaで表現してみました(GW.split("仕事");のこと)。
予定では4/29から5/5までずっと休みだったはずなのに、普通に
4/30、5/1と出勤しました(悲)。
しかも、ドキュメント作成ばっかだし、やってらんねーぜ!
アジャイルプロセスしてぇー!!!
アジャイルプロセスってのは、「包括的なドキュメントよりも動作する
ソフトウェア」
っていう精神の開発手法です。「いらねー文書や
契約は省いて、その分、コミュニケーションとテストをたくさん
しようぜ、そしたら、良いソフトウェアが作れるぜ!」
っていう
感じです。(僕なりの解釈)
XP(エクストリームプログラミング)もアジャイルプロセスの一つです。

で、今回はPropertiesファイルをSingletonオブジェクトにしよう
というものです。
デザインパターンに
Singletonパターンってのがあって(ご存知の方も多いと思いますが)
オブジェクトが1つしか存在しないことを保証するパターンなのです。
最初の一回だけ、オブジェクトを生成してそれを使いまわすような
時に使えます。

システムの設定などをPropertiesファイルに
書いておいて、一度だけ読み込んで値を保持しておくなんていうことは
よくやると思うのですが、そういう場面で使える汎用的なクラスを
Singletonパターンを応用して作ってみました。

それではソース行ってみよう!

スポンサーリンク



実行しましょう!
このメルマガをSingletonProperties.javaという名前で保存。
そして以下をsample.propertiesという名前で
SingletonProperties.javaと同じディレクトリに保存。
user=musashi
password=hidarimiddle

javac -d . *.java
java singleton.Main sample.properties

実行結果

キー値:user 値:musashi
キー値:password 値:hidarimiddle

(1)〜(2)
SingletonProperties.getProperties(String filePath)を呼び出すと
引数で受け取ったfilePathのPropertiesがmapに登録されているか調べる。
登録されてたら、登録されてるPropertiesを返す。

(3)〜(4)
登録されてない場合、
さっき登録されているか調べてる最中に他のスレッドが
filePathのPropertiesを読み込んでいるかもしれないので、
スレッドと同期を取ってもう一度filePathのPropertiesがmapに
登録されているか調べる。スレッドと同期を取ってるのが
synchronized (SingletonProperties.class)
の構文だ。synchronizedで囲った部分は1つのスレッドから
しか実行出来なくなります。

(5)以降
それでも、登録されてない時はファイルからPropertiesに
読み込んで、mapに登録する。次回同じファイルをgetProperties
したら、登録されているので、そちらを返す。つまりファイルを
読み込んでオブジェクトを生成するのは一度だけというわけです。

これがSingletonパターン!!っとはいえ、このプログラムは
Singletonパターンの応用的な使い方です。本に載っているのは
もっとシンプルです。汎用的にPropertiesをSingletonするために
HashMapを使ってみました。

んじゃぁねぇーーーーーーーー
やまろう

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2020 AllRights Reserved Powered by AFFINGER4.