Denne artikkelen er rettet mot alle som for første gang møter konseptet med designmønstre, har hørt begrepet singleton , eller på en eller annen måte implementert singleton-mønsteret, men ikke forsto hva som skjedde. Velkommen! CodeGym-studenter møter designmønstre for første gang på nivå 15, når kapteinen uventet ber dem om å "forsterke" deres forståelse ved å implementere Java Singleton-mønsteret med lat implementering. Studenter som hører om singleton- mønsteret for første gang har umiddelbart mange spørsmål: hva i all verden er et designmønster? Hvorfor trenger vi det? Hva er en singleton ? Og til slutt, hva er lat implementering? La oss svare på disse spørsmålene i rekkefølge.
Og singleton -mønsteret er bare ett av dem.
med blackjack og tallog bruke mye tid på det, eller du kan implementere en som har vært forstått og beskrevet i lang tid. Det samme gjelder med designmønstre. I tillegg, med designmønstre, blir kode mer standard, og når du bruker riktig mønster, er det mindre sannsynlig at du gjør feil, siden mønsterets vanlige fallgruver ble identifisert og eliminert for lenge siden. På toppen av alt annet hjelper kunnskap om mønstre programmerere til å forstå hverandre bedre. Du kan ganske enkelt si navnet på et mønster i stedet for å prøve å gi en lang forklaring til andre programmerere. Oppsummert hjelper designmønstre deg:
For å avslutte denne delen, merker vi at hele kroppen av designmønstre kan deles inn i tre store grupper:
Hva i all verden er et designmønster?
Jeg tror litt historie er for å svare på dette spørsmålet med best mulig forståelse. Det er fire kjente programmeringsforfattere (Erich Gamma, John Vlissides, Ralph Johnson og Richard Helm) som kom opp med en interessant idé. De la merke til at programvareutvikling ofte krevde at de skulle løse omtrent de samme problemene og skrive kode strukturert på samme måte. Så de bestemte seg for å beskrive typiske mønstre som ofte må brukes i objektorientert programmering. Boken deres ble utgitt i 1994 under tittelen Design Patterns: Elements of Reusable Object-Oriented Software. Bokens navn viste seg å være for langt og folk begynte rett og slett å kalle den boken til The Gang of Four. Den første utgaven inkluderte 23 mønstre. Etterpå ble dusinvis av andre mønstre oppdaget.Et designmønster er en standardisert løsning på et vanlig problem. |
Hvorfor trenger vi designmønstre?
Du kan programmere uten å kjenne til mønstre: på nivå 15 har du allerede skrevet hundrevis av miniprogrammer på CodeGym uten å vite at de eksisterer. Dette antyder at designmønstre er et slags verktøy hvis bruk skiller mesteren fra amatøren: Designmønstre beskriver hvordan man løser et typisk problem på riktig måte. Dette betyr at du sparer tid ved å kjenne til mønstre. På den måten ligner de på algoritmer. Du kan for eksempel lage din egen sorteringsalgoritme
|
Til slutt, singleton-mønsteret
Singleton er et kreasjonsmønster . Dette mønsteret sikrer at det bare er én forekomst av en klasse og gir et globalt tilgangspunkt for dette objektet. Fra beskrivelsen bør det være klart at dette mønsteret skal brukes i to tilfeller:- når programmet krever at ikke mer enn ett objekt av en bestemt klasse skal opprettes. For eksempel kan et dataspill ha en Hero-klasse og bare ett Hero-objekt som beskriver den eneste helten i spillet.
- når du trenger å gi et punkt for global tilgang til et objekt. Du må med andre ord gjøre objektet tilgjengelig fra hvor som helst i programmet. Dessverre, det er ikke nok å bare lage en global variabel, siden den ikke er skrivebeskyttet: hvem som helst kan endre variabelens verdi, slik at objektets globale tilgangspunkt kan gå tapt. Disse egenskapene til en Singleton er nødvendige, for eksempel når du har et objekt som fungerer med en database, og du trenger tilgang til databasen fra ulike deler av programmet. En Singleton vil sikre at ingen skriver kode som erstatter den tidligere opprettede forekomsten.
-
Finn et eksempel på Singleton med lat initialisering.
-
Lag tre singleton-klasser - Sol, Måne, Jord - i separate filer ved å bruke samme prinsipp.
-
ImplementerePlanetgrensesnitt i sol- , måne- og jordklasser .
- I statisk blokk av Solution -klassen kaller dureadKeyFromConsoleAndInitPlanetmetode.
-
ImplementerreadKeyFromConsoleAndInitPlanetmetode funksjonalitet:
-
5.1. Les én strengparameter fra konsollen
-
5.2. Hvis parameteren er lik en avPlanetgrensesnittets konstanter, lag passende Planet- objektet.
-
-
Du må gi klassen et privat statisk felt som lagrer et enkelt objekt:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Gjør (standard) konstruktøren privat. Dette betyr at den ikke kan nås utenfor klassen og vil ikke kunne returnere nye objekter:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Erklær en statisk opprettelsesmetode som vil bli brukt for å få singletonen:
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