你如何在Dartbuild立一个单身人士?

单例模式确保只创build一个类的一个实例。 我如何在Dart中build立这个?

感谢Dart的工厂构造函数 ,很容易构build一个单例:

class Singleton { static final Singleton _singleton = new Singleton._internal(); factory Singleton() { return _singleton; } Singleton._internal(); } 

你可以用new构造它

 main() { var s1 = new Singleton(); var s2 = new Singleton(); print(identical(s1, s2)); // true print(s1 == s2); // true } 

我不觉得它非常直观地阅读新的Singleton()。 你必须阅读文档才能知道新的实际上并不是真的创build一个新的实例。

这是另一种做单身的方法(基本上是Andrew所说的)。

LIB / thing.dart

 library thing; final Thing thing = new Thing._private(); class Thing { Thing._private() { print('#2'); } foo() { print('#3'); } } 

main.dart

 import 'package:thing/thing.dart'; main() { print('#1'); thing.foo(); } 

请注意,由于Dart的延迟初始化,在第一次调用getter之前,单例不会被创build。

如果你愿意,你也可以在singleton类上实现单身作为静态getter。 即Thing.singleton,而不是顶级的getter。

还请阅读Bob Nystrom 从他的游戏编程模式书中获得的单身人士 。

在库中使用全局variables怎么样?

single.dart

 library singleton; var Singleton = new Impl(); class Impl { int i; } 

main.dart

 import 'single.dart'; void main() { var a = Singleton; var b = Singleton; ai = 2; print(bi); } 

或者这皱起了眉头?

Java中单例模式是必需的,但全局概念并不存在,但似乎你不需要在Dart中走很长的路。

飞镖单体由const构造函数和工厂

 class Singleton { factory Singleton() => const Singleton._internal_(); const Singleton._internal_(); } void main() { print(new Singleton() == new Singleton()); print(identical(new Singleton() , new Singleton())); } 

这是另一种可能的方法:

 void main() { var s1 = Singleton.instance; s1.somedata = 123; var s2 = Singleton.instance; print(s2.somedata); // 123 print(identical(s1, s2)); // true print(s1 == s2); // true //var s3 = new Singleton(); //produces a warning re missing default constructor and breaks on execution } class Singleton { static final Singleton _singleton = new Singleton._internal(); Singleton._internal(); static Singleton get instance => _singleton; var somedata; }