07
iulie 2021
Modelul singleton în PHP
Folosim modelul singleton pentru a restrânge numărul de instanțe care pot fi create dintr-o clasă consumatoare de resurse la una singură.
Cursurile care consumă resurse sunt clase care ar putea încetini site-ul nostru web sau pot costa bani. De exemplu:
- Unii furnizori externi de servicii (API) percep bani pe fiecare utilizare.
- Unele clase care detectează dispozitive mobile ar putea încetini site-ul nostru.
- Stabilirea unei conexiuni cu o bază de date necesită mult timp și încetinește aplicația noastră.
Deci, în toate aceste cazuri, este o idee bună să restricționăm numărul de obiecte pe care le creăm din clasa scumpă la un singur.
Folosiți un model single pentru a limita numărul de obiecte la unul singur!
Anatomia unui model unic
Să începem prin a înțelege caracteristicile structurale ale unei clase care respectă modelul singleton :
- Un constructor privat este folosit pentru a preveni crearea directă a obiectelor din clasă.
- Procesul costisitor este realizat în cadrul constructorului privat.
- Singura modalitate de a crea o instanță din clasă este folosind o metodă statică care creează obiectul numai dacă nu a fost deja creat.
De ce este un singleton?
Deoarece restricționăm numărul de obiecte care pot fi create dintr-o clasă la un singur, ajungem cu toate variabilele care indică același obiect unic.
Exemplu practic :: clasa bazei de date
Să demonstrăm modelul de singleton cu o clasă care stabilește o conexiune la baza de date și restrânge numărul de instanțe la o singură.
Deoarece folosim o clasă care verifică dacă există deja o conexiune înainte de a stabili una nouă, chiar nu contează de câte ori creăm un obiect nou din clasă, obținem în continuare aceeași conexiune. Pentru a demonstra ideea, să creăm trei instanțe din clasă și să le aruncăm.
Rezultatul este aceeași conexiune pentru cele trei instanțe.
Clasa care nu folosește un singleton pentru a contacta baza de date
Pentru a înțelege problema rezolvată de modelul singleton, să luăm în considerare următoarea clasă care nu are mecanism pentru a verifica dacă există deja o conexiune înainte de a stabili o nouă conexiune.
Acum, de fiecare dată când creăm un obiect nou, stabilim și o nouă conexiune la baza de date.
Acest lucru are implicații pentru încetinirea sistemului, deoarece fiecare nouă conexiune cu baza de date costă timp.
Vă încurajez să rulați codul pentru a vedea singuri rezultatul.
Modelul de singleton: binele, răul și urâtul
Modelul singleton este probabil cel mai infam tipar existent și este considerat un anti-model, deoarece creează variabile globale care pot fi accesate și modificate de oriunde din cod.
Cu toate acestea, utilizarea modelului singleton este justificată în acele cazuri în care dorim să restricționăm numărul de instanțe pe care le creăm dintr-o clasă pentru a salva resursele sistemului. Astfel de cazuri includ conexiuni de baze de date, precum și API-uri externe care devorează resursele sistemului nostru.
Sursa: https://phpenthusiast.com