Singletonパターン:オブジェクトの生成に関するパターン
* Singleton : 一つずつ起こること;1個のもの * デザインパターンとしては、クラスのインスタンスが1つしか生成されないことを保証する
使いどころ
* ロガークラス(ログ出力クラス) 以下のように、マルチスレッド環境下で、インスタンスが2つ生成されてしまうと、ログ出力パスが変わってしまうため、http://blogs.wankuma.com/masaru/archive/2008/07/24/150168.aspx
* 画面表示など重い処理を行う場合、一度作成したら、使いまわすために利用する
サンプル
public class SampleSingleton { // ★ポイント1★ privateでstaticなインスタンス private static SampleSingleton sampleSingleton; public string id; public string name; public static SampleSingleton GetInstance() { // ★ポイント2★ 同じ型のインスタンスを返す getInstance() がクラス関数として定義され、 // null以外は生成しないようにしている if (sampleSingleton == null) { sampleSingleton = new SampleSingleton(); } return sampleSingleton; } // ★ポイント3★ privateなコンストラクタ private SampleSingleton() { this.id = "0001"; this.name = "Mike"; } }
補足
* .NETの場合、lockステートメント(以下URL参照のこと)を使うほういいかも。http://blogs.yahoo.co.jp/dk521123/28718911.html
クラス図
+---------------------------------------+ | SampleSingleton | +---------------------------------------+ | - sampleSingleton : SampleSingleton | +---------------------------------------+ | - SampleSingleton() <= コンストラクタ | | + GetInstance() : SampleSingleton | +-------------------------ーー----------+
参考文献
http://wkp.fresheye.com/wikipedia/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3http://itpro.nikkeibp.co.jp/article/COLUMN/20060104/226860/?ST=develop