😸

Dart で Singletonの作成【知っている人向け】

2021/08/12に公開

分かっている人(というか自分)向けのメモです。詳細は他の方の記事をご参照ください。

作成

class SingletonClass {
  static final SingletonClass _instance = SingletonClass._internal();
  SingletonClass._internal();
  factory SingletonClass() {
    return _instance;
  }
  
  void method(){}
} 

使用

SingletonClass instance = SingletonClass();
SingletonClass().method();

検索してみて

factory 内でinstanceがnullのときに、初期化するというソースが多かった。それをJavaなどマルチスレッドの言語で実施すると、相当いいタイミング(nullだったので作成している間に、別のスレッドでnullを確認した場合)で二つのinstanceができる可能性があった。もしかすると、Dartでは発生しない可能性(シングルスレッドだから大丈夫とか、factoryが同時に実行されないとか、あるかもしれない)もあるが、staticで初期化する方が安全だと考える。

Discussion