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 }
Factory Pattern
문제: 객체의 여러 변형을 만듭니다.
해결책: 객체를 동적으로 생성하려면 팩토리 공급자를 만듭니다.
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
문제: 객체 상태가 변경되면 여러 종속 객체에 알립니다.
해결책: 관찰 가능한 개체(관찰 가능)와 여러 관찰자를 만듭니다. 관찰된 내용이 변경되면 모든 관찰자에게 알립니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!