設計模式是針對軟體設計中出現的常見問題的經過嘗試和測試的解決方案。他們提供了一個模板或指南,以靈活且可重複使用的方式解決這些問題。
每種模式都代表了開發人員可以適應其特定環境的最佳實踐。設計模式通常分為三大類。
為了開始這個系列,我們先來談談單例模式。
單例模式確保一個類別只有一個實例,並提供對該實例的全域存取點。
這在您需要管理共用資源(例如資料庫連線或設定設定)的情況下非常有用。
通常需要確保某個類別僅存在一個實例,例如在管理配置或與硬體資源互動時。如果沒有 Singleton,建立多個實例可能會導致資料不一致或資源鎖定等問題。
在使用非同步程式碼時,這種情況很常見,其中多個 goroutine 可以建立類別的新實例或存取共享資源。
考慮資料庫連接池:如果應用程式的多個部分同時建立新連接,則最終可能會出現冗餘或衝突的資料庫互動。單例確保在整個應用程式中僅建立和使用一個連線。
package main import ( "fmt" "sync" ) type Singleton interface { DoSomething() string } type singleton struct{} var lock = &sync.Mutex{} var instance *singleton func NewSingletonInstance() *singleton { if instance == nil { lock.Lock() defer lock.Unlock() if instance == nil { fmt.Println("Creating single instance now.") instance = &singleton{} } else { fmt.Println("Single instance already created.") } } else { fmt.Println("Single instance already created.") } return instance } func (s *singleton) DoSomething() string { return "Doing something." } func main() { instance1 := NewSingletonInstance() instance2 := NewSingletonInstance() fmt.Printf("%p\n", instance1) fmt.Printf("%p\n", instance2) }
函數 NewSingletonInstance 確保僅建立一個單例實例,即使多次呼叫也是如此。
以上是Go 設計模式#Singleton的詳細內容。更多資訊請關注PHP中文網其他相關文章!