本文是 FlutterTips 項目的第一篇,歡迎你們在同性交友社區 Star 本項目,謝謝你們!git
單例模式是平常開發中最經常使用的設計模式之一,在工做中各類 Manager 和 SharedInstance 層出不窮。本文就分享一下單例在 Flutter 中的使用。github
首先咱們先看一下,在 Flutter 中如何實現一個單例。數據庫
class SomeSharedInstance {
// 單例公開訪問點
factory SomeSharedInstance() =>_sharedInstance()
// 靜態私有成員,沒有初始化
static SomeSharedInstance _instance;
// 私有構造函數
SomeSharedInstance._() {
// 具體初始化代碼
}
// 靜態、同步、私有訪問點
static SomeSharedInstance _sharedInstance() {
if (_instance == null) {
_instance = SomeSharedInstance._();
}
return _instance;
}
}
複製代碼
如上所示,咱們首先定義了一個類 SomeSharedInstance
,在業務中咱們經過定義 SomeSharedInstance()
方法返回一個對單例的懶加載:若是不存在則初始化,若是存在則返回。由於 Dart
是一個單線程的語言,因此其調用是線程安全的,這意味着咱們全局有且僅有一個 _instance
。設計模式
懶漢模式安全
在類加載時,不建立實例。加載時速度較快,運行時獲取實例速度較慢。 上面的例子就是懶漢模式,它適用於絕大多數的場景。函數
餓漢模式工具
在類加載時,直接進行實例的建立。加載時獲取實例速度較慢,運行時速度較快。對上面的代碼作一個小的改動便可。spa
class SomeSharedInstance {
// 單例公開訪問點
factory SomeSharedInstance() =>_sharedInstance()
// 靜態私有成員,沒有初始化
static SomeSharedInstance _instance = SomeSharedInstance._();
// 私有構造函數
SomeSharedInstance._() {
// 具體初始化代碼
}
// 靜態、同步、私有訪問點
static SomeSharedInstance _sharedInstance() {
return _instance;
}
}
複製代碼