constructor関数にprivate修飾子をつける
constructor関数にprivate修飾子をつけます。
1 2 3 4 5 6 |
class Person { name: string; private constructor() { this.name = "田中"; } } |
そうすると外部からnewできなくなります。
1 |
const peson = new Person(); //エラーになる。 |
class内部のメソッドからならアクセスできるので以下のようにgetInstanceというstaticメソッドを作ってそれを呼ぶようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Person { private static instance: Person; name: string; private constructor() { this.name = "田中"; } static getInstance() { if (Person.instance) return Person.instance; Person.instance = new Person(); return Person.instance; } } const peson = Person.getInstance(); |
オブジェクトをexportする。
古いブラウザだと動かない場合があるので、その場合はシングルトンは以下のようにも記述できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Person { private static instance: Person; name: string; private constructor() { this.name = "田中"; } static getInstance() { if (Person.instance) return Person.instance; Person.instance = new Person(); return Person.instance; } } export default new Person(); |
これを別ファイルでimportすることによって一つのインスタンスが共有されます。
こちらの方が簡潔に書けますね。
ただ、通常のシングルトンとは記述方法が異なるのでシングルトンクラスだといまいちわかりづらいことが欠点と言えるかもしれません。
クラス名でシングルトンということがわかるようにするか、コメントで補足する必要があるかもしれません。
この記事へのコメントはありません。