2011/07/01

Singleton とは

Singleton パターンを用いると、プログラム内でそのクラスのインスタンスが1つしか生成されないことを保証することができる。ポイントはいかの3点。

・同じ型のインスタンスが private なクラス変数として定義されている。
・コンストラクタの識別子が private になっている。
・同じ型のインスタンスを返す getInstance() がクラス関数(名前は任意)として定義されている。

たとえば、ある一式の設定を管理するクラス ClassSetting にsingletonパターンを定義してみると、

' Singletonクラス
Public Class ClassSetting

    Private Shared setting As ClassSetting = New ClassSetting ()

    ' コンストラクタ(外部からのアクセスが不可)
    Private Sub New()
       ...
    End Sub

    ' 唯一のインスタンスを取得
    Public Shared Function GetInstance() As ClassSetting
       Return setting
    End Function

End Class


コンストラクタの識別子が private となっているのがポイント。

コンストラクタの識別子が private になっていることで、ClassSetting のインスタンスを外部から生成することはできない。

だから、ClassSetting クラスのインスタンスが必要なときは、以下のように、getInstance()メソッドを使って利用することになる。

dim setting as ClassSetting = ClassSetting.GetInstance()


getInstance()メソッドは最初に呼び出されたときにだけインスタンスを生成し、2回目以降に呼び出されたときは最初に生成したインスタンスを返すように作られている。

そのため、プログラム中にSingletonクラスのインスタンスが1つしか存在しないことが保証される。