單例模式是什么
單例模式是一種創建型設計模式:單例模式保證一個類僅有一個實體,并提供一個訪問它的全域訪問點,
為什么要用單例模式
為什么要用單例模式?在系統中某些物件,我們只需要一個全域的,如果每次實體化會浪費資源,所以單例模式可以節約記憶體,加快物件訪問速度,因此單例模式在某些場合適合使用,比如多個模塊使用同一個資料源連接物件;比如配置資料可以由一個單例物件統一讀取;還有比如日志檔案的物件也可以用單例模式,
單例模式怎么實作
我們可以用一個私有的全域變數來保存一個物件,并且提供一個獲取物件的方法,在這個方法里面來實作只創建一次,但是要注意多執行緒的情況,如果多個執行緒同時訪問,也要保證只創建一個物件,這里我們可以用golang的原子操作來實作,我們這里用sync.Once來實作延遲加載,也就是單例模式中的懶漢模式;還有餓漢模式既是初始化的時候就實體物件,方法只是去獲取物件,很簡單這里就不做累述了,
package singleton
import "sync"
// Singleton 是單例模式介面
// 通過該介面可以避免 GetInstance 回傳一個包私有型別的指標
type Singleton interface {
foo()
}
type singleton struct{}
func (s singleton) foo() {}
var (
instance *singleton
once sync.Once
)
//GetInstance 用于獲取單例模式物件
func GetInstance() Singleton {
once.Do(func() {
instance = &singleton{}
})
return instance
}
優點
- 為整個系統提供一個全域的訪問點,利于管理,
- 全域只有一個該物件,節約記憶體,
- 避免了頻繁的創建銷毀,提示性能,
缺點
- 不適用于變化的物件,如果同一型別的物件總是要在不同的用例場景發生變化,單例就會引起資料的錯誤,
- 由于單利模式中沒有抽象層,因此單例類的擴展有很大的困難,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/445378.html
標籤:設計模式
上一篇:設計模式之配接器模式
