Part 2 | Singleton design pattern شرح

 أول باترن معانا فى السلسلة بتاعه ال 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

Design Patterns Part 1


Channel Youtube


Comments