Modeli i Dizajnit Singleton është një model i projektimit të softuerit që siguron që një klasë të ketë vetëm një shembull, ndërsa ofron një pikë aksesi global për këtë shembull. Ky model përdoret shpesh për të siguruar një pikë të vetme kontrolli për cilësimet e konfigurimit të një aplikacioni, lidhjet e bazës së të dhënave dhe burime të tjera të përbashkëta.

Në C#, modeli i dizajnit Singleton mund të zbatohet duke përdorur kodin e mëposhtëm:

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
}

Ky implementim përdor një variabël statike private për të ruajtur instancën e vetme të klasës dhe një pronë publike statike për të siguruar akses në instancë. Vetia përdor një deklaratë bllokimi për të siguruar që vetëm një thread mund të krijojë një shembull të klasës në të njëjtën kohë, edhe në një mjedis me shumë fije.

Në Python, modeli i dizajnit Singleton mund të zbatohet duke përdorur kodin e mëposhtëm:

class Singleton:
    _instance = None
    def __new__(cls):
        if not cls._instance:
            cls._instance = super().__new__(cls)
        return cls._instance

Ky implementim përdor një variabël të klasës private _instance për të ruajtur instancën e vetme të klasës. Metoda e re anashkalohet për të siguruar që të krijohet vetëm një shembull i klasës, duke kontrolluar nëse ndryshorja _instance është None dhe duke krijuar një shembull të ri nëse është.

Për të përdorur klasën Singleton në pjesë të tjera të aplikacionit tuaj, thjesht mund t'i referoheni veçorisë Instance për të hyrë në instancën e vetme të klasës. Ja një shembull se si mund të përdorni klasën C# Singleton në një klasë tjetër

public class Logger
{
    public void LogMessage(string message)
    {
        // Use the singleton instance to log the message
        Singleton.Instance.WriteToLog(message);
    }
}

Dhe këtu është një shembull se si mund të përdorni klasën PythonSingleton në një klasë tjetër:

class Logger:
    def log_message(self, message):
        # Use the singleton instance to log the message
        Singleton().write_to_log(message)

Në shembujt e mësipërm, klasa Logger përdor shembullin singleton të klasës Singleton për të shkruar mesazhe log. Kjo siguron që të gjitha mesazhet e regjistrit të shkruhen në të njëjtin skedar, pasi shembulli singleton garanton që të krijohet vetëm një shembull i klasës Singleton, dhe të gjitha thirrjet në veçorinë Instance ose metodën __new__ kthejnë të njëjtin shembull.

Vlen të përmendet se modeli singleton është një model i gjendjes globale dhe përdorimi i tepërt i tij mund ta bëjë kodin tuaj të vështirë për të arsyetuar, testuar dhe korrigjuar. Përdoreni atë me kujdes, dhe vetëm kur keni vërtet nevojë për garancitë e ofruara nga modeli singleton.