📚

【デザインパターン】シングルトンパターン - Singleton

2021/06/20に公開

シングルトンパターンとは、GoF(Gang of Four)デザインパターンの一つであり、あるクラスのインスタンスが一つしかない状態を保証する方法です。

シングルトンパターンのコード

class Singleton {
    private static instance: Singleton
    private constructor() {}

    static getInstance() {
        if (!Singleton.instance) {
	    console.log("Create an instance!!!")
            Singleton.instance = new Singleton()
        }
        return Singleton.instance
    }
}
Singleton.getInstance()
  • instance getInstanceで生成されたインスタンスを保持しておく静的な変数
  • constructor() スコープをprivateに定義し、getInstanceからのみ生成できるようにする
  • getInstance() インスタンスを取得する静的メソッド。呼び出し時にインスタンスが存在しなれば生成する

Singletonクラスの外でnewで呼び出すとエラーになります。これはconstructorをprivateにしているためです。

new Singleton() // Constructor of class 'Singleton' is private...

複数回呼び出しても「Create an instance!!!」は、1回しか出力されません。クラスのインスタンスが一つしかない状態を表しています。

Singleton.getInstance() // Create an instance!!!
Singleton.getInstance()
Singleton.getInstance()

シングルトンパターンの使い所

私はシングルトンパターンを使ったことがないため調べたところ、定義ファイルの読み込みやログの出力など、リソースが単一で不変なオブジェクトに対しての参照に使うのが良いそうです。(下記、teratailを参考にしています)

参考

https://teratail.com/questions/36721
https://refactoring.guru/design-patterns/singleton/typescript/example

Discussion