Corak reka bentuk ialah penyelesaian yang telah dicuba dan diuji kepada masalah biasa yang timbul dalam reka bentuk perisian. Mereka menyediakan templat atau panduan untuk menyelesaikan masalah ini dengan cara yang fleksibel dan boleh digunakan semula.
Setiap corak mewakili amalan terbaik yang pembangun boleh menyesuaikan diri dengan konteks khusus mereka. Corak reka bentuk selalunya dikelaskan kepada tiga kategori utama.
Untuk memulakan siri ini, mari bercakap tentang corak Singleton.
Corak Singleton memastikan bahawa kelas hanya mempunyai satu tika dan menyediakan titik global akses kepada tika itu.
Ini berguna dalam kes di mana anda perlu mengurus sumber yang dikongsi, seperti sambungan pangkalan data atau tetapan konfigurasi.
Selalunya terdapat keperluan untuk memastikan bahawa hanya satu contoh kelas wujud, seperti semasa mengurus konfigurasi atau berinteraksi dengan sumber perkakasan. Tanpa Singleton, mencipta berbilang kejadian boleh membawa kepada isu seperti data yang tidak konsisten atau kunci sumber.
Ini sangat biasa berlaku apabila bekerja dengan kod tak segerak, di mana berbilang gorouti boleh mencipta kejadian baharu kelas atau mengakses sumber kongsi.
Pertimbangkan kumpulan sambungan pangkalan data: Jika beberapa bahagian aplikasi anda mencipta sambungan baharu pada masa yang sama, anda mungkin mengalami interaksi pangkalan data yang berlebihan atau bercanggah. Singleton memastikan hanya satu sambungan dibuat dan digunakan di seluruh aplikasi.
package main import ( "fmt" "sync" ) type Singleton interface { DoSomething() string } type singleton struct{} var lock = &sync.Mutex{} var instance *singleton func NewSingletonInstance() *singleton { if instance == nil { lock.Lock() defer lock.Unlock() if instance == nil { fmt.Println("Creating single instance now.") instance = &singleton{} } else { fmt.Println("Single instance already created.") } } else { fmt.Println("Single instance already created.") } return instance } func (s *singleton) DoSomething() string { return "Doing something." } func main() { instance1 := NewSingletonInstance() instance2 := NewSingletonInstance() fmt.Printf("%p\n", instance1) fmt.Printf("%p\n", instance2) }
Fungsi NewSingletonInstance memastikan bahawa hanya satu tika tunggal dibuat, walaupun dipanggil beberapa kali.
Atas ialah kandungan terperinci Go Design Corak #Singleton. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!