أول باترن معانا فى السلسلة بتاعه ال design patterns هى ال Singleton
دردشة
طبعا احنا عارفين أن الباترن دى حل لمشكلة مشهور حطها ناس متخصصه
فى المجال وتم الاتفاق بينهم على ديزاين ليها معين.
طيب أيه المشكلة اللى بتحلها الباترن دى يعم الحج تعالى اديك مثال قولناه قبل كدا عشان نطلع منه تعريف ال singleton pattern .
🎯 المشكلة
عندك كلاس بيعمل connection بالداتابيز وانت عايز طالما عملت connection بالداتابيز بتاعتك مره وجيت تجيب حاجه من الداتابيز تانى متعملش connection تانى من اول وجديد فمعنى كدا انت عايز تاخد اوبجيكت واحد من الكلاس بتاعك وكل ما تجى تعمل connection تستخدمه
طيب يبقى كدا أيه مشكلتك أنك لو جيت تعمل اوبجيكت من الكلاس بتاعك يقولك مينفعش يعنى مش مسموح ليك تستخدم object = new class();l
🎯 التعريف
ديزاين الكودا بطريقة تخليك تكريت اوبجيكت واحد بس وبيكون جلوبل.
-----------------------------------------------------------------------------------------------------------------------------
Advantage of Singleton design pattern
مميزات الباترن دى فى كودك أنها بتحفظ ليك مساحه ال memory بتاعتك
ﻷنها مش بتنشأ غير أوبجيكت واحد مهما كان عدد ال request بتاعك.
--------------------------------------------------------------------------------------------------------------------------------------
Usage of Singleton design pattern
Singleton pattern is mostly used in
multi-threaded and database applications. It is used in logging, caching, thread pools, configuration settings etc.
بتكون محتاجه فى الابليكشن اللى فيها multi-thread وبتحتاجه فى الابليكشن اللى معاها الداتابيز وقولنا مثال ليها فوق وغيرها زى ال caching
--------------------------------------------------------------------------------------------------------------------------------------
How to create Singleton design pattern
بعد الكلام الرغى الكتير اللى فوق دا عايزين نعرف هنبنى الباترن دى ازى .
فى الاول كدا أنت لما بتيجى تعمل أوبجيكت جديد بتعمل call لل constructor صح أنا بقا مش عايزك تعرف تنادى عليه يبقى نعمله private
ودى اول خطوة طيب هنوصل للحاجه اللى جوا ازى يبقى نخلى الميثود اللى عندى static وهنعمل ميثود جوا بترجع اوبجيكت من الكلاس وهو دا اللى هفضل استخدمه كل ما احتاج يكون معايا اوبجيكت .
1️⃣ Private constructor
2️⃣ Static member
3️⃣ Static factory method
class Singleton { private static Singleton obj; // private constructor to force use of // getInstance() to create Singleton object private Singleton() {} public static Singleton getInstance() { if (obj==null) obj = new Singleton(); return obj; } }
--------------------------------------------------------------------------------------------------------------------------------------
Forms of singleton pattern
عندك اكتر من شكل انك تعمل ديزاين لكود الباترن دى
- Eager initialization
- Static block initialization
- Lazy Initialization
- Thread Safe Singleton
- Bill Pugh Singleton Implementation
- Using Reflection to destroy Singleton Pattern
- Enum Singleton
- Serialization and Singleton
هنشرح جزء منهم والباقى تقدر تسرش عليه يلا بينا نبدأ
1- Eager initialization
الطريقة دى بتخليك تعمل build للاوبجيكت بتاعك وقت انشاء ال class حتى لو الابليكشن منادش عليه فهو تم انشاء برضو طب ما تيجى نشوف الكود بتاعه
public class EagerInitializedSingleton { private static final EagerInitializedSingleton instance = new EagerInitializedSingleton(); //private constructor to avoid client applications to use constructor private EagerInitializedSingleton(){} public static EagerInitializedSingleton getInstance(){ return instance; } }
2- Lazy Initialization
الطريقة دى بتعالج مشكلة الطريقة اللى فاتت بأنها مش بتنشأ اوبجيكت الا لو أنت احتاجته
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} public static LazyInitializedSingleton getInstance(){ if(instance == null){ instance = new LazyInitializedSingleton(); } return instance; } }
3- Thread Safe Singleton
الطريقة دى هى بالظبط اللى فوق لكن زود عليها أنه هيخليها synchronized عشان تكون شغاله من خلال threadواحد وبالتالى تكون اكثر أمان لانها بابلك .
بس لو ساب الكود اللى فوق زى ما هو وضاف قبل الميثود بتاع getInstance() كلمه synchronized
دا هيقلل ال performance طب عشان اتغلب علي ال extra overhead اللى بيقلل ال performance
هنفذها بالطريقة دى
public class ThreadSafeSingleton { private static ThreadSafeSingleton instance; private ThreadSafeSingleton(){} public static ThreadSafeSingleton getInstance(){ if(instance == null){ synchronized (ThreadSafeSingleton.class) { if(instance == null){ instance = new ThreadSafeSingleton(); } } } return instance; } }
-----------------------------------------------------------------------------------------------------------------------------
⛔️ الى اللقاء
بس كدا انا خلصت عندكوا اى تعليقات او اضافه ياريت تعرفونا ومتنساش تعمل لايك وشير وصبصكرايب معلش اندمجت شويه😍😍
يلا سلاااااام.
#Part2
#Design_patterns
#Interview_Question
#Next_Step
Comments
Post a Comment