أنماط التصميم هي حلول مجربة ومختبرة للمشاكل الشائعة التي تنشأ في تصميم البرمجيات. أنها توفر نموذجًا أو دليلًا لحل هذه المشكلات بطريقة مرنة وقابلة لإعادة الاستخدام.
يمثل كل نمط أفضل الممارسات التي يمكن للمطورين التكيف معها مع سياقهم المحدد. غالبًا ما يتم تصنيف أنماط التصميم إلى ثلاث فئات رئيسية.
لبدء هذه السلسلة، دعونا نتحدث عن نمط سينجلتون.
يضمن نمط Singleton أن يحتوي الفصل على مثيل واحد فقط ويوفر نقطة وصول عالمية إلى هذا المثيل.
يفيد هذا في الحالات التي تحتاج فيها إلى إدارة مورد مشترك، مثل اتصالات قاعدة البيانات أو إعدادات التكوين.
في كثير من الأحيان تكون هناك حاجة للتأكد من وجود مثيل واحد فقط للفئة، كما هو الحال عند إدارة التكوينات أو التفاعل مع موارد الأجهزة. بدون Singleton، يمكن أن يؤدي إنشاء مثيلات متعددة إلى مشكلات مثل عدم تناسق البيانات أو تأمين الموارد.
يحدث هذا بشكل شائع جدًا عند العمل باستخدام تعليمات برمجية غير متزامنة، حيث يمكن لـ goroutines المتعددة إنشاء مثيلات جديدة لفئة ما أو الوصول إلى الموارد المشتركة.
ضع في اعتبارك تجمع اتصال قاعدة البيانات: إذا قامت أجزاء متعددة من التطبيق الخاص بك بإنشاء اتصالات جديدة في نفس الوقت، فقد ينتهي بك الأمر إلى تفاعلات قاعدة بيانات متكررة أو متضاربة. يضمن Singleton إنشاء اتصال واحد فقط واستخدامه عبر التطبيق.
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) }
تضمن وظيفة NewSingletonInstance إنشاء مثيل واحد فقط من المفردة، حتى عند استدعائها عدة مرات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3