Acest articol se adresează oricui, pentru prima dată, întâlnește conceptul de modele de design, a auzit termenul singleton sau a implementat cumva modelul singleton, dar nu a înțeles ce se întâmplă. Bine ati venit! Elevii CodeGym întâlnesc modele de design pentru prima dată la Nivelul 15, când căpitanul le cere în mod neașteptat să-și „întărească” înțelegerea prin implementarea modelului Java Singleton cu implementare leneșă. Elevii care aud despre modelul singleton pentru prima dată au instantaneu o mulțime de întrebări: ce naiba este un model de design? De ce avem nevoie de ea? Ce este un singleton ? Și, în sfârșit, ce este implementarea leneșă? Să răspundem la aceste întrebări în ordine.
Și modelul singleton este doar unul dintre ele.
cu blackjack și numereși petreceți mult timp făcând acest lucru, sau puteți implementa unul care a fost înțeles și descris de mult timp. Același lucru este valabil și cu modelele de design. În plus, cu modelele de design, codul devine mai standard și, atunci când utilizați modelul corespunzător, este mai puțin probabil să faceți greșeli, deoarece capcanele comune ale modelului au fost identificate și eliminate cu mult timp în urmă. Pe lângă orice altceva, cunoașterea tiparelor îi ajută pe programatori să se înțeleagă mai bine. Puteți spune pur și simplu numele unui model, în loc să încercați să oferiți o explicație lungă colegilor dvs. programatori. În concluzie, modelele de design vă ajută:
Pentru a încheia această secțiune, observăm că întregul corp de modele de design poate fi împărțit în trei grupuri mari:
Ce naiba este un model de design?
Cred că puțină istorie este pentru a răspunde la această întrebare cu cea mai bună înțelegere. Există patru autori celebri de programare (Erich Gamma, John Vlissides, Ralph Johnson și Richard Helm) care au venit cu o idee interesantă. Ei au observat că dezvoltarea de software le cere adesea să rezolve aproximativ aceleași probleme și să scrie cod structurat în același mod. Așa că au decis să descrie modele tipice care adesea trebuie folosite în programarea orientată pe obiecte. Cartea lor a fost publicată în 1994 sub titlul Design Patterns: Elements of Reusable Object-Oriented Software. Numele cărții s-a dovedit a fi prea lung și oamenii au început să o numească pur și simplu cartea Gang of Four. Prima ediție a inclus 23 de modele. Ulterior, au fost descoperite zeci de alte modele.Un model de design este o soluție standardizată la o problemă comună. |
De ce avem nevoie de modele de design?
Puteți programa fără să cunoașteți modele: până la urmă, până la Nivelul 15, ați scris deja sute de mini-programe pe CodeGym fără să știți măcar că există. Acest lucru sugerează că modelele de design sunt un fel de instrument a cărui utilizare îl distinge pe maestru de amator: modelele de design descriu cum să rezolve corect o problemă tipică. Aceasta înseamnă că cunoașterea tiparelor vă economisește timp. În acest fel, ele sunt similare cu algoritmii. De exemplu, puteți crea propriul algoritm de sortare
|
În cele din urmă, modelul singleton
Singleton este un model de creație . Acest model asigură că există o singură instanță a unei clase și oferă un punct de acces global pentru acest obiect. Din descriere, ar trebui să fie clar că acest model ar trebui aplicat în două cazuri:- atunci când programul dvs. necesită crearea nu mai mult de un obiect dintr-o anumită clasă. De exemplu, un joc pe computer poate avea o clasă Hero și un singur obiect Hero care descrie singurul erou din joc.
- atunci când trebuie să furnizați un punct pentru acces global la un obiect. Cu alte cuvinte, trebuie să faceți obiectul disponibil de oriunde în program. Din păcate, nu este suficient să creezi o variabilă globală, deoarece nu este protejată la scriere: oricine poate schimba valoarea variabilei, astfel încât punctul de acces global al obiectului s-ar putea pierde. Aceste proprietăți ale unui Singleton sunt necesare, de exemplu, atunci când aveți un obiect care funcționează cu o bază de date și trebuie să accesați baza de date din diferite părți ale programului. Un Singleton se va asigura că nimeni nu scrie cod care înlocuiește instanța creată anterior.
-
Găsiți un exemplu de Singleton cu inițializare leneșă.
-
Creați trei clase singleton - Soare, Lună, Pământ - în fișiere separate, folosind același principiu.
-
ImplementeazăPlanetăinterfață în clasele Soare , Lună și Pământ .
- În blocul static al clasei Solution , apelațireadKeyFromConsoleAndInitPlanetmetodă.
-
ImplementațireadKeyFromConsoleAndInitPlanetfuncționalitatea metodei:
-
5.1. Citiți un parametru String din consolă
-
5.2. Dacă parametrul este egal cu unul dintrePlanetăconstantele interfeței, creați obiectul ThePlanet adecvat.
-
-
Trebuie să oferiți clasei un câmp static privat care stochează un singur obiect:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Faceți constructorul (implicit) privat. Aceasta înseamnă că nu poate fi accesat în afara clasei și nu va putea returna obiecte noi:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Declarați o metodă de creare statică care va fi folosită pentru a obține singletonul:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION