單例模式
介紹
確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。
實現
普通實現
class Singleton {
///靜態實例
static Singleton? _instance;
/// 私有的命名構造函數,在此處初始化
Singleton._internal();
///定義getInstance方法獲取實例
static Singleton getInstance() {
///如果定義的實例為空,將構造函數賦值給實例
if (_instance == null) {
_instance = Singleton._internal();
}
///返回實例
return _instance!;
}
}
利用getter實現
class Singleton {
static Singleton? _instance;
Singleton._internal();
///用get直接獲取實例
static get instance {
if (_instance == null) {
_instance = Singleton._internal();
}
return _instance;
}
}
利用工廠構造函數factory實現
class Singleton {
static Singleton? _instance;
Singleton._internal();
///工廠構造函數
factory Singleton() {
if (_instance == null) {
_instance = Singleton._internal();
}
return _instance!;
}
}
利用判空符??和延遲初始化符號late
class Singleton {
static Singleton? _instance;
Singleton._internal() {
_instance = this;
}
///判空符??
factory Singleton() => _instance ?? Singleton._internal();
}
class Singleton {
Singleton._internal();
factory Singleton() => _instance;
static late final Singleton _instance = Singleton._internal();
}