Dart 语言创建单例模式(Singleton)

4,014 阅读1分钟

转自连接: zaiste.net/programming…
原文作者: zaiste
原作者更多文章: zaiste.net/posts/

1. 应用工厂构造器

Dart 提供了工厂构造器, 简化了单例模式的创建.

示例代码
class Singleton {
  static final Singleton _singleton = Singleton._internal();

  factory Singleton() => _singleton;

  Singleton._internal(); // private constructor
}

main() {
  var s1 = Singleton();
  var s2 = Singleton();

  print(identical(s1, s2));  // true
  print(s1 == s2);           // true
}
  • 通过私有构造器构建实例, 然后通过工厂构造器返回实例. 保证每次返回都是同一个实例.

dart constructors

2. 通过静态属性的私有构造器

这种方式无法通过构造器创建实例, 只能通过静态属性引用.

class Singleton {
  Singleton._privateConstructor();

  static final Singleton instance = Singleton._privateConstructor();
}

main() {
  var s1 = Singleton.instance;
  var s2 = Singleton.instance;

  print(identical(s1, s2));  // true
  print(s1 == s2);           // true
}

3. 应用场景举例

class Session {
  // singleton
  static final Session _singleton = Session._internal();
  factory Session() => _singleton;
  Session._internal();
  static Session get shared => Session;

  String username;
  String password;
}

Session.shared.username = 'abc';