Ugrás a tartalomhoz

singleton pattern

A Wikiszótárból, a nyitott szótárból


Főnév

singleton pattern (tsz. singleton patterns)

  1. (informatika) A Singleton pattern (szingli minta) egy kreációs (példányosító) tervezési minta, amely biztosítja, hogy egy osztálynak csak egyetlen példánya létezzen a program futása során, és ezt az egy példányt globálisan elérhetővé teszi.



🧠 Miért hasznos?

Olyan helyzetekben, ahol egy globális állapotot vagy erőforrást kell kezelni, például:

  • Konfigurációk
  • Naplózás (logging)
  • Adatbázis kapcsolat
  • Folyamatvezérlő objektumok
  • Cache



🎯 Cél

  1. Egy példány (instance) biztosítása
  2. Globális elérhetőség
  3. Késleltetett példányosítás (lazy initialization)



🧱 Alapstruktúra

class Singleton {
private:
    static Singleton* instance;

    // Privát konstruktor – megakadályozza a kívülről történő példányosítást
    Singleton() {}

public:
    // Másolás és értékadás letiltása
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }

    void doSomething() {
        // Példány-specifikus logika
    }
};

// Kezdetben nullptr
Singleton* Singleton::instance = nullptr;

🧵 Thread-safe változat (C++11-től)

class Singleton {
public:
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }

    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    void doSomething() {
        // Logika
    }

private:
    Singleton() {}
};

C++11-től a static lokális változók példányosítása thread-safe, azaz szálbiztos.


✅ Előnyök

  • Biztosítja, hogy csak egy példány létezik
  • Globális elérhetőség
  • Szabályozott példányosítás



❌ Hátrányok

  • Globális állapot → nehezebb tesztelés
  • Rejtett függőségek
  • Versenyhelyzet (race condition) lehetőség nem szálbiztos implementáció esetén
  • Antipatternként is emlegetik, ha túlhasználják



🧪 Használati példák

  • Logger:
Singleton::getInstance().log("Application started");
  • Configuration loader
  • Resource manager játékokban
  • Database manager



🆚 Singleton vs Static Class

Jellemző Singleton Statikus osztály
Példányosítás Igen Nem
Öröklés támogatott Igen Nem
Interfész implementálható Igen Nem
Állapot Tárolható Nehezebben menedzselhető



🧩 Minták kombinálása

A Singleton gyakran kombinálható más mintákkal:

  • Factory + Singleton: például egy Factory ad vissza egy Singleton példányt
  • Observer + Singleton: Singleton event dispatcher
  • Facade + Singleton: Egyetlen belépési pont a rendszerhez



📌 TL;DR

  • A Singleton egy klasszikus minta, de óvatosan használandó.
  • Hasznos, ha csak egy objektum példányra van szükség.
  • Modern C++-ban static lokális változóval könnyen megvalósítható szálbiztosan.