Corak reka bentuk di Golang ialah penyelesaian universal untuk reka bentuk perisian, yang boleh membantu pembangun menyelesaikan masalah reka bentuk biasa dan meningkatkan kebolehselenggaraan dan kebolehskalaan kod. Walaupun Golang ialah bahasa pengaturcaraan yang ditaip secara statik dan tidak mempunyai konsep kelas dalam erti kata tradisional, fungsi seperti kelas masih boleh dicapai melalui struktur dan kaedah. Berikut akan memperkenalkan beberapa corak reka bentuk biasa dan memberikan kod sampel Golang.
Corak Kilang ialah corak reka bentuk ciptaan yang digunakan untuk merangkum proses penciptaan objek supaya pelanggan tidak perlu mengetahui kelas pelaksanaan objek tertentu. Di Golang, corak kilang boleh dilaksanakan melalui fungsi.
package main import "fmt" type Shape interface { Draw() } type Circle struct{} func (c Circle) Draw() { fmt.Println("Drawing Circle") } type Square struct{} func (s Square) Draw() { fmt.Println("Drawing Square") } func GetShape(shapeType string) Shape { switch shapeType { case "circle": return Circle{} case "square": return Square{} default: return nil } } func main() { circle := GetShape("circle") square := GetShape("square") circle.Draw() square.Draw() }
Corak tunggal memastikan bahawa kelas hanya mempunyai satu contoh dan menyediakan titik akses global. Di Golang, corak tunggal boleh dilaksanakan melalui pembolehubah peringkat pakej dan sync.Once
.
package main import ( "fmt" "sync" ) type Database struct { Name string } var instance *Database var once sync.Once func GetInstance() *Database { once.Do(func() { instance = &Database{Name: "Singleton Database"} }) return instance } func main() { db1 := GetInstance() db2 := GetInstance() fmt.Println(db1.Name) fmt.Println(db2.Name) }
Corak Pemerhati mentakrifkan hubungan pergantungan satu-ke-banyak antara objek Apabila keadaan objek berubah, semua objek yang bergantung padanya akan dimaklumkan dan dikemas kini secara automatik. Di Golang, corak pemerhati boleh dilaksanakan menggunakan fungsi panggil balik.
package main import "fmt" type Subject struct { observers []Observer } func (s *Subject) Attach(o Observer) { s.observers = append(s.observers, o) } func (s *Subject) Notify(message string) { for _, observer := range s.observers { observer.Update(message) } } type Observer interface { Update(message string) } type ConcreteObserver struct { Name string } func (o ConcreteObserver) Update(message string) { fmt.Printf("[%s] Received message: %s ", o.Name, message) } func main() { subject := Subject{} observer1 := ConcreteObserver{Name: "Observer 1"} observer2 := ConcreteObserver{Name: "Observer 2"} subject.Attach(observer1) subject.Attach(observer2) subject.Notify("Hello, observers!") }
Di atas adalah contoh kod untuk melaksanakan corak reka bentuk seperti kelas di Golang Melalui corak reka bentuk ini, kod boleh dibuat lebih modular, boleh diselenggara dan diperluaskan. Harap kod sampel ini membantu anda.
Atas ialah kandungan terperinci Adakah terdapat corak reka bentuk seperti kelas di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!