Singleton - observă modelul

Scopul modelului Singleton (sau Single) este de a oferi acces la un obiect unic de oriunde din aplicație. Prin unicitate se înțelege că un astfel de obiect există în memorie într-o singură copie, iar alte instanțe nu pot fi create.







Fără condiția unicității, Singleton este o variabilă globală comună, luând în considerare plusurile și minusurile rezultate (care sunt majoritatea). Prin urmare, înainte de a utiliza acest model, asigurați-vă că se potrivește cu adevărat. Obiectul care urmează să fie implementat ca un Singleton trebuie să fie cu adevărat unic la nivel de sistem.

Exemplu de implementare a modelului Singleton în C ++

Pentru a implementa din punct de vedere tehnic un obiect singleton și ao folosi într-o aplicație este destul de simplă (care captivează):

Dacă se dorește, obiectul Singleton poate fi adaptat la un mediu de execuție multithreaded folosind mutexuri.

Este tentant să aveți un obiect disponibil în orice moment al programului. Dar acest lucru încalcă multe dintre principiile de a crea un cod bun. Prin urmare, nu vă grăbiți să adăugați Singletones, care complică logica programului și introduc dependențe inutile.

Să luăm în considerare un exemplu. Ar putea părea o idee bună să creați o clasă pentru gestionarea setărilor unei aplicații sub forma Singleton. Apoi, toate componentele aplicației vor putea vedea opțiunile necesare și le vor folosi cu ușurință. Pe de o parte, ideea pare destul de bună. Configurația aplicației poate fi într-adevăr reprezentată de o entitate unică. Accesul gratuit la Singleton va simplifica utilizarea configurației.







Cu toate acestea, în acest caz există o problemă serioasă. Toate componentele încep să depindă de Singleton. Dacă trebuie doar să transferați una dintre clase într-o altă aplicație, va trebui să trageți împreună cu ea și Singleton, care poate fi proiectat pentru a gestiona parametrii a zeci de alte clase. Este mai bine să-și petreacă un pic mai mult timp proiectând, ci să asigure un transfer clar al parametrilor la clase prin constructorii lor, și nu prin intermediul Singleton-ului inconspicuos.

În plus, modelul Singleton complică utilizarea polimorfismului și a altor farmece OOP care pot fi necesare atunci când nu este posibilă refacerea minimă.

Deși există utilizări destul de inofensive ale Singletones. De exemplu, când se implementează un alt model: Fabrica abstractă.

De asemenea, utilizarea lui Singleton este justificată pentru a reprezenta resursele fizice unice ale computerului. De exemplu, sistemul de urmărire pentru conectarea / deconectarea dispozitivelor USB este potrivit să se implementeze sub forma lui Singleton.


Model de stare C ++


Pattern Decorator și crearea de filtre de imagine în Qt


Visitor de model în C ++


Fabrica de modele Abstract în C ++


Modelul de compoziție C ++


Un exemplu de polimorfism în C ++ bazat pe OOP


Null Object Pattern


Builderul și modelul XML







Trimiteți-le prietenilor: