Dartの中の人のSeth Ladd氏がSingletonの実装方法として以下の書き方を提案している。
How do you build a Singleton in Dart? - Stack Overflow
class Singleton {
static final Singleton _singleton = new Singleton._internal();
factory Singleton() {
return _singleton;
}
Singleton._internal();
}
main() {
var s1 = new Singleton();
var s2 = new Singleton();
print(identical(s1, s2)); // true
print(s1 == s2); // true
}
Dartのfactoryコンストラクタを使用していて一見スマートに見えるが、使用する側からすると、参照の度にnewしているので、文脈としては新たにインスタンスを得ているように見える。
また、実用としてはSingletonというクラス名を付けることは無いので、仮に例としてSingletonなDirectorクラスだとしたら、文脈としてそれがSingletonであることが予想できない。
main() {
var d1 = new Director();
var d2 = new Director();
print(d1 == d2); // true
}
なので、ここは従来通りstaticなDirector.getInstance()とするのが無難な気がするが、Dart的でmodernで可読性の高いSingletonの実装方法は無いだろうか。