Singleton

今回はSingletonの復習です。


Singletonパターンは
インスタンスがひとつしかないようなクラス構造」です。
コレをどのように活用するかと言うと
「ソフトウェアの設定について記述しておくクラス」
などに使うことが挙げられます。


Singletonのポイントとしては、
インスタンスがひとつしか存在しないことを保証する」
という点にあるでしょう。



「保証」とは
そもそもプログラマがそのクラスのインスタンスをたった一つしか生成しないように気をつけてれいば済むことです。
ですが、ヒューマンエラーというのはなくならないものなので、そこをプログラムで補ってやる、それがSingletonパターンというわけです。



説明と同じくSingletonパターンも至って単純で
・クラス固有の領域、staticな領域に自身のインスタンスを確保する。
・そのインスタンスを取得する関数を用意する
・外部からインスタンスを生成されないようにする。
これらを守ってクラスを作ればSingletonパターンの完成です。


Singletonパターンを使うときには、複数の環境からインスタンスを取得するような時に、注意が必要です。
複数の環境から同時にアクセスされるマルチスレッド環境では、複数のメソッドが同時にインスタンスを取得しようとして結果的にインスタンスが複数生成される場合があります。
このような場合、Singletonパターンから逸脱することになり、これが潜在的なバグの要因になり得ます。
ですから、環境に応じたコーディングが求められるパターンのようです。


また、このSingletonパターンについては否定的な意見もあります。
ただひとつしかないインスタンスがグローバル領域のように使用され、
それの使用法が様々な問題を孕むという事ですね。
たしかに、Singletonパターンが故にオブジェクト指向なプログラミングが阻害されてしまうというのはあってはならないことです。
使うときは細心の注意を払って使うことが必要なようです。


参考文献

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

実践!!デザインパターン―オブジェクト指向設計のポイント

実践!!デザインパターン―オブジェクト指向設計のポイント

プログラマが知るべき97のこと

プログラマが知るべき97のこと