转自连接: 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
}
- 通过私有构造器构建实例, 然后通过工厂构造器返回实例. 保证每次返回都是同一个实例.
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';