單例和其他語言沒有區別,需要定義一個靜態變量,然后通過方法/屬性返回該變量。
需要注意的是盡量使用私有構造方法,避免因為使用了構造函數而導致使用錯誤。
如果下面這樣用:
class ClassA {
static final shared = ClassA();
}
則ClassA.shared
會返回單例,但是當不小心寫成ClassA()
時也不會報錯,而是會生成新的對象,就可能出現問題。
所以應該使用如下方法進行單例創建:
class ClassA {
static final shared = ClassA._();
ClassA._(); // 如果需要,添加對應代碼
factory ClassA() {
return shared;
}
}
這樣ClassA.shared
和ClassA()
都會返回相同的單例對象,不會出現問題。