singleton pattern
Megjelenés
Főnév
singleton pattern (tsz. singleton patterns)
- (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
- Egy példány (instance) biztosítása
- Globális elérhetőség
- 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
staticloká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
staticlokális változóval könnyen megvalósítható szálbiztosan.
- singleton pattern - Szótár.net (en-hu)
- singleton pattern - Sztaki (en-hu)
- singleton pattern - Merriam–Webster
- singleton pattern - Cambridge
- singleton pattern - WordNet
- singleton pattern - Яндекс (en-ru)
- singleton pattern - Google (en-hu)
- singleton pattern - Wikidata
- singleton pattern - Wikipédia (angol)