Singleton Pattern
الغرض من هذا النوذج هو التاكد من عدم عمل اكثر من نسخة من نفس الكلاس والتاكد ايضا من نقطة دخول رئيسية وعامة للاوبجيكت والمثال الاوضح لذلك هي ايقونة عمل البرامج حيث ان بعض البرامج لا تسمح بتشغيل اكثر من نسخة في ان واحد .
مثال:
public sealed class Singleton
{
// Private Constructor
Singleton() { }
// Private object instantiated with private constructor
static readonly Singleton instance = new Singleton();
// Public static property to get the object
public static Singleton UniqueInstance
{
get { return instance; }
}
}
الكلمة المحجوزة sealed تسمح للكلاس بعمل نسخة واحدة من الكلاس وبذلك لن نحتاج الى طريقة معقدة للتعامل مع هذا الباترن
لاحظ ان المنشئ او الـ constructor برايفت وذلك ليتم انشاء الاوبجيكت فقط من خلال ال UniqueInstance وبذلك نضمن وجود اوبجيكت واحد تم انشاءه ولكن في هذه الحالة اذا اردنا ان نقوم بعمل نسخة اخرى لاستخدامها في thread اخر لن نستطيع واذا حاولنا استخدام نفس النسخة في اكثر من thread سوف يكون unsafe-thread
ولذلك نعالج هذه المشكلة في الكود التالي
public class Singleton
{
// Private constructor
Singleton() { }
// Nested class for lazy instantiation
class SingletonCreator
{
static SingletonCreator() { }
// Private object instantiated with private constructor
internal static readonly
Singleton uniqueInstance = new Singleton();
}
// Public static property to get the object
public static Singleton UniqueInstance
{
get { return SingletonCreator.uniqueInstance; }
}
}
كما ترى لم نقم باستخدام sealed وفي نفس الوقت ضمنا عدم تكرار انشاء الاوبجيكت وذلك لان الدالة UniqueInstance سوف تمرر في كل مرة نفس الاوبجيكت
الله ينور شكرا ليك جدا جدا جدا
ردحذفomar.netdeveloper@yahoo.com
اتمنى لو في فيديو عربي للشرك كل ال design pattern
اتمنى مراسلتي
ردحذفشكرا جزيلاً ياباشمهندس.
ردحذفعايز أكلمك ومش عارف اوصل للميل بتاعك
ممكن تبعتلي على الميل علشان أتواصل معاك ؟
ايميلي
ayman.sharkawy609@gmail.com