Singleton on yksi ns. Design Pattern eli suunnittelumalli. Sen tarkoitus on luoda luokka, josta voidaan luoda vain yksi olio. Se toimii niin, että kun tästä luokasta luodaan olio ja luokasta on jo aiemmin luotu olio, ei luodakaan uutta vaan palautetaan olemassaoleva olio.
Singletonia voidaan hyödyntää, kun samaan olioon halutaan päästä käsiksi useammasta eri luokasta (esimerkiksi useammasta Formista). Sitä voidaan hyödyntää esimerkiksi webtokenin tallentamiseen.
Jos mietitään sovellusta, jossa on Login-form ja siellä onnistuneen kirjautumisen jälkeen saadaan token. Tämän jälkeen sovelluksessa voi olla useita eri formeja joiden välillä siirrytään ja niissä kaikissa lähetetään http-requesteja suojatuille reiteille. Kuinka siis aina päästään käsiksi tokeniin? Tässä voisi hyödyntää Singletonia.
Esimerkki Singleton-luokasta nimeltään MySingleton
#ifndef MYSINGLETON_H #define MYSINGLETON_H #include <qstring.h> class MySingleton { private: static MySingleton* instance; QString name; public: static MySingleton* getInstance(); QString getName() const; void setName(const QString &value); }; #endif // MYSINGLETON_H
#include "mysingleton.h" MySingleton* MySingleton::instance = nullptr; MySingleton* MySingleton::getInstance() { if (instance == nullptr) { instance = new MySingleton(); } return instance; } QString MySingleton::getName() const { return name; } void MySingleton::setName(const QString &value) { name = value; }
MySingleton *objectSingleton = MySingleton::getInstance();Ja sen metodeja voidaan kutsua seuraavasti
objectSingleton->setName("Teppo Testi"); QString singletonName=objectSingleton->getName();