またもやしょうもない例で申し訳ないですが、地球はこの世界にたった1つしかありません。
ですが、プログラム中ではその気になれば100個の地球を作ることだって出来ます。
これを良いか悪いかはそのプログラムの目的にもよりますが、
例えば宇宙の動きをシミュレーションしたいのであれば、1つだけ作ればいいはずです。
もっと具体的な例をしましょう。たとえばスタンドアロンのアプリケーションを作って、
メインのフォームとなるクラスを定義します。そのクラスはプログラム中で1つあれば十分で、
むしろ何個も作られては困るはずです。最も、プログラマが注意深くプログラムを行えばいいのですが、
はじめから1つしかインスタンス化しないつもりなら、1つしかインスタンスがないようにすればいいのです。
それを可能にするのがSingletonパターンです。必要なクラスは地球は表すクラスだけで十分です。
Singletonはたった1つのクラス内で実現します。今回の例のプログラムはとても小さなものになりました。
Singletonを適用したEarthクラスでは、privateなクラス変数、earthを定義しています。
このearthが唯一のインスタンスとなります。
インスタンスが1つしかないと保証できるのは、コンストラクタがprivateになっているからです。
privateなコンストラクタはクラス定義内からでしか呼び出せません。
そしてソースを見れば分かるように、コンストラクタが呼ばれているのは1度だけです。
あとはそのインスタンスを返すpublicなメソッドを定義すればいいだけです。
Singletonは非常に簡単なパターンなので多用しがちです。
Singletonパターンを適用するときは、本当にそのクラスのインスタンスが1つだけかを
よく検討してから使用すべきです。
|