Acest model este folosit destul de des în aplicațiile pe care le folosim zi de zi, cum ar fi Winamp, Skype și altele, care nu iți permit să rulezi acea aplicație de mai multe ori pe același calculator.
Structura de bază a unei clase ce respectă aceste șablon este următoarea:
După cum se vede în imaginea de mai sus constructorul este trecut la private: pentru ca să nu fie apelat în afara clasei. Metoda instance() va returna un obiect de tip Singleton nou în cazul în care nu a fost creat încă sau va returna un pointer la instanța deja creată.
Să vedem cum va arata implementarea unei clase proiectată cu ajutorul șablonului Singleton:
class Singleton { public: static Singleton* instance(void); ~Singleton(void); private: Singleton(void); static Singleton* uniqueInstance; }
Acum să vedem cum arată implementarea metodelor acestei clase:
Singleton* Singleton::uniqueInstance = 0; Singleton::Singleton(void) { } Singleton::~Singleton(void) { } Singleton* Singleton::instance(void) { if(uniqueInstance == 0) uniqueInstance = new Singleton(); return uniqueInstance; }
Utilizatorii au acces la obiectele de tip Singleton exclusiv prin metoda instance(void). Membrul uniqueInstance este inițializat cu 0 la pornirea programului. Metoda instance(void) verifică dacă instanța noastă este nulă, atunci se crează o instantă a clasei iar dacă nu este va returna instanța deja creată.
No comments:
Post a Comment