在Dart中创建单例有多种方法,以下是其中几种常见的方法。
方法一:使用静态变量
class Singleton {
static Singleton _instance;
Singleton._();
factory Singleton() {
if (_instance == null) {
_instance = Singleton._();
}
return _instance;
}
void showMessage() {
print("Hello, Singleton!");
}
}
void main() {
var singleton1 = Singleton();
singleton1.showMessage(); // 输出:Hello, Singleton!
var singleton2 = Singleton();
singleton2.showMessage(); // 输出:Hello, Singleton!
print(identical(singleton1, singleton2)); // 输出:true
}
方法二:使用静态变量和初始化方法
class Singleton {
static Singleton _instance;
Singleton._();
static void init() {
if (_instance == null) {
_instance = Singleton._();
}
}
static Singleton get instance {
if (_instance == null) {
throw Exception("Singleton has not been initialized.");
}
return _instance;
}
void showMessage() {
print("Hello, Singleton!");
}
}
void main() {
Singleton.init();
var singleton1 = Singleton.instance;
singleton1.showMessage(); // 输出:Hello, Singleton!
var singleton2 = Singleton.instance;
singleton2.showMessage(); // 输出:Hello, Singleton!
print(identical(singleton1, singleton2)); // 输出:true
}
方法三:使用静态变量和工厂构造函数
class Singleton {
static final Singleton _instance = Singleton._();
Singleton._();
factory Singleton() => _instance;
void showMessage() {
print("Hello, Singleton!");
}
}
void main() {
var singleton1 = Singleton();
singleton1.showMessage(); // 输出:Hello, Singleton!
var singleton2 = Singleton();
singleton2.showMessage(); // 输出:Hello, Singleton!
print(identical(singleton1, singleton2)); // 输出:true
}
这些方法都可以确保在应用程序中只有一个实例存在。您可以根据自己的需求选择其中的一种方法来创建单例。