Qt-ohjelmointi
Singleton

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 Singleton

class Singleton {
private:
    Singleton() {}
    string name;
public:

    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }

    // Estä kopiointi ja sijoitus
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    QString getName(){
        return name;
    }
    void setName(const QString &value){
        name=value;
    }
};
Edellisestä luokasta voidaan käyttää Singleton-instanssia seuraavasti
Singleton& objSingleton1 = Singleton::getInstance();
objSingleton1.setName("Teppo Testi");
//edellä luodaan uusi olio

Singleton& objSingleton2 = Singleton::getInstance();
//edellä ei luoda uutta oliota, vaan palautetaan olemassa oleva olio
qDebug()<<objSingleton2.getName();



Toggle Menu