Corak reka bentuk digunakan secara meluas dalam rangka kerja Go untuk meningkatkan fleksibiliti dan kebolehselenggaraan kod. Corak reka bentuk khusus termasuk: Corak Singleton: memastikan bahawa kelas hanya mempunyai satu contoh; Corak pemerhati: membenarkan objek untuk melanggan dan bertindak balas kepada peristiwa Corak kaedah kilang: menyediakan antara muka untuk mencipta objek, dan penciptaan khusus kelas ditentukan oleh subkelas.
Pemahaman mendalam tentang corak reka bentuk dalam rangka kerja Go
Corak reka bentuk biasanya digunakan model penyelesaian masalah yang boleh berulang dalam kejuruteraan perisian dan digunakan secara meluas dalam rangka kerja Go. Dengan memahami corak ini, pembangun boleh menulis kod yang lebih fleksibel, boleh diselenggara dan berskala.
1. Corak Singleton
memastikan bahawa hanya satu contoh kelas dibuat.
import ( "sync" "fmt" ) type Singleton struct { sync.Mutex isInitialized bool instance *Singleton } func GetInstance() *Singleton { s := &Singleton{} s.Lock() defer s.Unlock() if !s.isInitialized { s.instance = s s.isInitialized = true } return s.instance } func main() { instance1 := GetInstance() instance2 := GetInstance() fmt.Println(instance1 == instance2) // true }
2. Corak pemerhati
membolehkan objek melanggan dan bertindak balas kepada acara.
import ( "fmt" "sync" ) type Subject interface { Attach(observer Observer) Detach(observer Observer) Notify() } type Observer interface { Update() } type ConcreteSubject struct { sync.Mutex observers []Observer state string } func (s *ConcreteSubject) Attach(observer Observer) { s.Lock() defer s.Unlock() s.observers = append(s.observers, observer) } func (s *ConcreteSubject) Detach(observer Observer) { s.Lock() defer s.Unlock() for i, o := range s.observers { if o == observer { s.observers = append(s.observers[:i], s.observers[i+1:]...) return } } } func (s *ConcreteSubject) Notify() { s.Lock() defer s.Unlock() for _, observer := range s.observers { observer.Update() } } func (s *ConcreteSubject) SetState(state string) { s.Lock() defer s.Unlock() s.state = state s.Notify() } type ConcreteObserver struct { id int sub *ConcreteSubject } func (o *ConcreteObserver) Update() { fmt.Printf("ConcreteObserver %d notified, subject state: %s\n", o.id, o.sub.state) } func main() { subject := &ConcreteSubject{} observer1 := &ConcreteObserver{id: 1, sub: subject} observer2 := &ConcreteObserver{id: 2, sub: subject} subject.Attach(observer1) subject.Attach(observer2) subject.SetState("New state") }
3. Corak kaedah kilang
menyediakan antara muka untuk mencipta objek, tetapi kelas penciptaan khusus ditentukan oleh subkelas.
rreeeeAtas ialah kandungan terperinci Analisis mendalam corak reka bentuk dalam rangka kerja golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!