1- Introduction

Singleton is a design pattern that ensures a class has only one instance and provides a global access point to it.

يسمح بوجود نسخة واحدة فقط من الكلاس طوال فترة عمل البرنامج، ويوفر نقطة وصول عامة لهذه النسخة.


1_hsWdRg_kwTuFUUY-l9QN6w.png


2- Problem

Sometimes, we need only one instance of a class (like a fingerprint, identity card, Logger, or AppSettings). Using normal objects allows multiple instances, which may cause conflicts.


3-Basic Implementation

public class FingerprintSingletonBasic
{
		private static FingerprintSingletonBasic _instance;
		private FingerprintSingletonBasic() { }
		
		public static FingerprintSingletonBasic GetInstance()
		{
		    if (_instance == null)
		    {
		        _instance = new FingerprintSingletonBasic();
		    }
		    return _instance;
		}
}

Limitation – العيب:

❌ Not thread-safe → قد يتم إنشاء أكثر من نسخة في برامج multi-threaded.


4-Enhanced Implementation – (Thread-safe)

public class FingerprintSingletonThreadSafe
{
      private static FingerprintSingletonThreadSafe _instance;
      private static readonly object _lock =newobject();

      private FingerprintSingletonThreadSafe() { }

	    public static FingerprintSingletonThreadSafeGetInstance()
	    {
	         lock (_lock)
	        {
	            if (_instance ==null)
	            {
	                _instance =new FingerprintSingletonThreadSafe();
	            }
	             return _instance;
	        }
	    }
}