Singleton
Singletonは、あるクラスのインスタンスが たった1つしかないこと保証するパターンです。
例:地球を作る。
ソースはこちら
またもやしょうもない例で申し訳ないですが、地球はこの世界にたった1つしかありません。 ですが、プログラム中ではその気になれば100個の地球を作ることだって出来ます。 これを良いか悪いかはそのプログラムの目的にもよりますが、 例えば宇宙の動きをシミュレーションしたいのであれば、1つだけ作ればいいはずです。

もっと具体的な例をしましょう。たとえばスタンドアロンのアプリケーションを作って、 メインのフォームとなるクラスを定義します。そのクラスはプログラム中で1つあれば十分で、 むしろ何個も作られては困るはずです。最も、プログラマが注意深くプログラムを行えばいいのですが、 はじめから1つしかインスタンス化しないつもりなら、1つしかインスタンスがないようにすればいいのです。

それを可能にするのがSingletonパターンです。必要なクラスは地球は表すクラスだけで十分です。

Earth 地球を表すクラス

Singletonはたった1つのクラス内で実現します。今回の例のプログラムはとても小さなものになりました。

Singletonを適用したEarthクラスでは、privateなクラス変数、earthを定義しています。 このearthが唯一のインスタンスとなります。

インスタンスが1つしかないと保証できるのは、コンストラクタがprivateになっているからです。 privateなコンストラクタはクラス定義内からでしか呼び出せません。 そしてソースを見れば分かるように、コンストラクタが呼ばれているのは1度だけです。 あとはそのインスタンスを返すpublicなメソッドを定義すればいいだけです。

Singletonは非常に簡単なパターンなので多用しがちです。 Singletonパターンを適用するときは、本当にそのクラスのインスタンスが1つだけかを よく検討してから使用すべきです。
実行結果
クラス図