單例模式,是一種常用的軟體設計模式,在他的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項且該是例易於外界訪問,從而方便對例項個數的控制並節約系統資源。
懶漢模式是開源專案中使用最多的一種,最大的缺點是分執行緒安全的。
//懶漢模式
type singleton struct
var instance *singleton
func gerinstance() *singleton
} return instance
}
這裡使用了go的sync.mutex,其工作模式類似於linux核心的futex物件,具體實現極其簡單,效能也***初始化是填入的0值將mutex設定在為鎖定狀態,同時保證時間開銷最小,這一特性允許將mutex作為其他物件的子物件使用。
//帶鎖的單例模式
type singleton struct
var instance *singleton
var mu sync.mutex
func gerinstance2() *singleton
} return instance
}
//帶鎖的單例模式
type singleton struct
var instance *singleton
var mu sync.mutex
func gerinstance() *singleton
} }return instance
}
這是乙個不錯的方法,但是還並不是很完美。因為編譯器優化沒有檢查例項儲存狀態。如果使用sync.atomic包的話就可以自動幫助我們載入和設定標記。
var initialized uint32
type singleton struct
var instance *singleton
var mu sync.mutex
func gerinstance() *singleton
mu.lock()
defer mu.unlock()
if initialized == 0
atomic.storeuint32(&initialized,1)
} return instance
}
//比較好的一種方式sync.once
type singleton struct
var instance *singleton
var once sync.once
func getinstance() *singleton
}) return instance
}
go設計模式之單例模式
在這裡插入描述 go設計模式之單例模式 在軟體開發時,經常會遇到有些物件需要保證只有乙個例項的,那麼這種設計模式就應用而生。單例模式,也叫單子模式,是一種常用的軟體設計模式,屬於建立型模式的一種。在應用這個模式時,單例物件的類必須保證只有乙個例項存在。許多時候整個系統只需要擁有乙個的全域性物件,這樣...
Go實現設計模式 單例模式
確保乙個類只有乙個例項並提供乙個全域性訪問點。意圖 再專案中有執行緒池,快取,對話方塊等,這類物件只能有乙個,如果創造多個就會有許多問題,所以有了單例模式。關鍵 僅僅針對golang 在方法中要有getinstance 來建立物件,且為了防止多執行緒錯誤記得加鎖 這個頁面的作者將 寫的很詳細了,可以...
go語言設計模式之工廠模式 位元組教育
工廠模式 factory pattern 是最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。在工廠模式中,建立物件時不會對客戶端暴露建立邏輯,並且時通過使用乙個共同的介面來執行新的建立的物件。乙個呼叫者想建立乙個物件,只知道物件名稱就可以了 擴充套件性高,如果...