Go 框架設計模式:單例模式:確保只有一個物件實例存在,透過全域變數和一次初始化實作。工廠模式:建立物件的多個變體,透過提供者動態建立物件。觀察者模式:當對象狀態改變時通知依賴對象,透過觀察者可被觀察對象實現。
Go 框架原始碼設計模式探索
在Go 框架中,設計模式廣泛用於最佳化程式碼結構、提高可維護性和可擴展性。本文將探討 Go 框架中常用的設計模式,並透過實戰案例展示其實際應用。
單例模式
#問題:確保只有一個物件的實例存在。
解決方案:建立全域變量,在第一次存取時初始化。
package main import ( "fmt" "sync" ) type Singleton struct {} var ( once sync.Once instance *Singleton ) func GetInstance() *Singleton { once.Do(func() { instance = &Singleton{} }) return instance } func main() { instance1 := GetInstance() instance2 := GetInstance() fmt.Println(instance1 == instance2) // 输出: true }
工廠模式
問題:建立物件的多個變體。
解決方案:建立一個工廠提供者來動態建立物件。
package main type Animal interface { Speak() string } type Dog struct {} func (d *Dog) Speak() string { return "Woof!" } type Cat struct {} func (c *Cat) Speak() string { return "Meow!" } type AnimalFactory struct {} func (f *AnimalFactory) CreateAnimal(name string) (Animal, error) { switch name { case "dog": return &Dog{}, nil case "cat": return &Cat{}, nil default: return nil, fmt.Errorf("Unsupported animal type: %s", name) } } func main() { factory := AnimalFactory{} dog, _ := factory.CreateAnimal("dog") cat, _ := factory.CreateAnimal("cat") fmt.Println(dog.Speak()) // 输出: "Woof!" fmt.Println(cat.Speak()) // 输出: "Meow!" }
觀察者模式
問題:當一個物件狀態改變時通知多個依賴物件。
解決方案:建立可被觀察的物件(被觀察者)和多個觀察者。當被觀察者發生變化時,它會通知所有觀察者。
package main import "fmt" type Observable struct { observers []Observer state int } func (o *Observable) AddObserver(observer Observer) { o.observers = append(o.observers, observer) } func (o *Observable) NotifyObservers() { for _, observer := range o.observers { observer.Update(o.state) } } type Observer interface { Update(state int) } type ConcreteObserver1 struct {} func (c *ConcreteObserver1) Update(state int) { fmt.Println("Observer 1:", state) } type ConcreteObserver2 struct {} func (c *ConcreteObserver2) Update(state int) { fmt.Println("Observer 2:", state) } func main() { observable := Observable{} observer1 := ConcreteObserver1{} observer2 := ConcreteObserver2{} observable.AddObserver(observer1) observable.AddObserver(observer2) observable.state = 10 observable.NotifyObservers() // 输出: Observer 1: 10, Observer 2: 10 }
這些設計模式是 Go 框架中廣泛使用的,掌握這些設計模式將大大提升你的程式碼品質和可維護性。
以上是golang框架原始碼設計模式探索的詳細內容。更多資訊請關注PHP中文網其他相關文章!