Singleton Desgin pattern


تانى ديزاين باتنر هنتكلم عنه انهارده هو
Singleton Design Pattern

هو عباره عن كلاس بيتاخد منه Only one instance request lifecycle in a web application
يعنى مش بقدر اخد منه
New Object ();
ﻻ هو مرة باخد منه instance واحد بس يقدر اى component يستخدمها و فى نفس الوقت متبقاش متخزنة فى global varibale
عشان avoid collision
يعنى لو حطيت package فيها global varibale بنفس الاسم فا سعتها حيحصل مشاكل

ايه دا ؟ طب ليه كدا يعنى ؟ 
تخيل معايا عندك مثلا كلاس بيـ connect مع داتا بيز كل مرة بتـ create منه object فى اكتر من مكان بقى
تخيل كدا معايا عدد ال connection identical اللى حتتـ create فى ال داتا بيز سيرفير ؟؟ 
فا مشكة كبيرة كدا 🤔🤔

طب مثلا عندك كلاس بيحتوى ع اعدادات مثلا كلاس settings
انت مش محتاج كذا instance منه
هو مرة واحده بس بتنادى عليه ف اى مكان

يعنى هتستخدمه كا
Database connector
Logger
lock file
Settings
Proritate
Config
او اى مثال بقى حسب ال Application بتاعك
المهم تكون فهمت فكرته بس

طيب و دا بيتعمل ازاى بقى ؟؟ 🤨🤨

بص يا سيدى دا كلاس عادى جدا زى اى كلاس خلقه مبرمج 😂😂
بس حتخلى ال private -- Construct method 😂
احييه طب انا حاخد منه ال instance ازاى بقى 😱
بسيطة بص ف الصورة هتلاقى فى static method اسمها
getInstance
و فى private static varibale فوق
عشان دا الى هتعمله return

فا انت كل اللى هتعمله هتنادى ع اسم الكلاس و تنادى ع الستاتك ميثود اللى بتعمل instance
بالطريقة دى كدا
Class::getInstance();
طيب نفهم ال method دى بتعمل ايه بقى
دى كل اللى بتعمله انها بتشوف ال varibale دا ب null وﻻ ﻻ
لو اة ب null يعنى دى اول مرة تاخد instance من الكلاس فا بتعمل new instanciation منه و
لو ﻻ بتبعتلك الكلاس نفسه بقى

طيب دلوقتى عندى واحد ذكية حب ياخد منه clone !!
فنا بحط ال magic method
__clone
فنا كدا بمنع بردو ان حد تانى ياخد منها clone
اول ما يفكر حتشتغل الفنكشن دى و تديله Exception

بس خلاص فا كدا انت معاك كلاس مش هيشتغل غير مرة واحده بس و عيش بقى برحتك حط متغيراتك و ميثوداتك 😂😂😂

اتمنى يكون شرح خفيف و بسيط و قدرت اوصل المعلومة

المصدر
http://www.phptherightway.com/pages/Design-Patterns.html
https://php.earth/docs/oop/design-patterns/singleton
http://designpatternsphp.readthedocs.io/en/latest/Creational/Singleton/README.html
وكتاب Head First Design Patters

تعليقات

المشاركات الشائعة من هذه المدونة

Chain of Responsibility Design pattern

Factory Design Pattern