Go フレームワーク設計パターン: シングルトン パターン: オブジェクト インスタンスが 1 つだけ存在するようにし、グローバル変数と 1 回限りの初期化を通じて実装します。ファクトリ パターン: オブジェクトの複数のバリアントを作成し、プロバイダーを通じてオブジェクトを動的に作成します。オブザーバー パターン: オブジェクトの状態が変化したときに依存オブジェクトに通知し、監視可能なオブザーバーを通じて実装されます。
Go フレームワークのソース コード設計パターンの探索
Go フレームワークでは、コード構造を最適化し、保守性とスケーラビリティを向上させるために、設計パターンが広く使用されています。この記事では、Go フレームワークで一般的に使用される設計パターンを調査し、実際のケースを通じてその実際の応用例を示します。
シングルトン パターン
問題: オブジェクトのインスタンスが 1 つだけ存在することを確認します。
解決策: グローバル変数を作成し、最初のアクセス時に初期化します。
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!" }
Observer Pattern
問題: オブジェクトの状態が変化したときに複数の依存オブジェクトに通知します。
解決策: 監視可能なオブジェクト (observable) と複数のオブザーバーを作成します。監視対象が変化すると、すべての監視者に通知されます。
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 中国語 Web サイトの他の関連記事を参照してください。