Den här artikeln riktar sig till alla som för första gången stöter på konceptet designmönster, har hört termen singel eller på något sätt implementerat singelmönstret men inte förstått vad som hände. Välkommen! CodeGym-studenter möter designmönster för första gången på nivå 15, när kaptenen oväntat ber dem att "förstärka" sin förståelse genom att implementera Java Singleton-mönstret med lat implementering. Studenter som hör talas om singelmönster för första gången har omedelbart många frågor: vad i hela friden är ett designmönster? Varför behöver vi det? Vad är en singleton ? Och slutligen, vad är lat implementering? Låt oss svara på dessa frågor i ordning.
Och singelmönstret är bara en av dem.
med blackjack och siffroroch ägna mycket tid åt det, eller så kan du implementera en som har förståtts och beskrivits under lång tid. Detsamma gäller med designmönster. Dessutom, med designmönster, blir kod mer standard, och när du använder rätt mönster är det mindre troligt att du gör misstag, eftersom mönstrets vanliga fallgropar identifierades och eliminerades för länge sedan. Utöver allt annat hjälper kunskap om mönster programmerare att förstå varandra bättre. Du kan helt enkelt säga namnet på ett mönster istället för att försöka ge en lång förklaring till dina andra programmerare. Sammanfattningsvis hjälper designmönster dig:
För att avsluta detta avsnitt, noterar vi att hela kroppen av designmönster kan delas in i tre stora grupper:
Vad i hela friden är ett designmönster?
Jag tror att lite historia är för att besvara denna fråga med bästa förståelse. Det finns fyra kända programmeringsförfattare (Erich Gamma, John Vlissides, Ralph Johnson och Richard Helm) som kom på en intressant idé. De märkte att mjukvaruutveckling ofta krävde att de löste ungefär samma problem och skrev kod strukturerad på samma sätt. Så de bestämde sig för att beskriva typiska mönster som ofta behöver användas i objektorienterad programmering. Deras bok publicerades 1994 under titeln Design Patterns: Elements of Reusable Object-Oriented Software. Bokens namn visade sig vara för långt och folk började helt enkelt kalla den boken av Fyragänget. Den första upplagan innehöll 23 mönster. Efteråt upptäcktes dussintals andra mönster.Ett designmönster är en standardiserad lösning på ett vanligt problem. |
Varför behöver vi designmönster?
Du kan programmera utan att känna till mönster: trots allt, på nivå 15, har du redan skrivit hundratals miniprogram på CodeGym utan att ens veta att de finns. Detta tyder på att designmönster är ett slags verktyg vars användning skiljer mästaren från amatören: Designmönster beskriver hur man korrekt löser ett typiskt problem. Det betyder att du sparar tid genom att känna till mönster. På det sättet liknar de algoritmer. Du kan till exempel skapa din egen sorteringsalgoritm
|

Slutligen singelmönstret
Singleton är ett skapande mönster . Detta mönster säkerställer att det bara finns en instans av en klass och tillhandahåller en global åtkomstpunkt för detta objekt. Från beskrivningen bör det framgå att detta mönster bör tillämpas i två fall:- när ditt program kräver att inte mer än ett objekt av en viss klass ska skapas. Till exempel kan ett datorspel ha en Hero-klass och bara ett Hero-objekt som beskriver den enda hjälten i spelet.
- när du behöver tillhandahålla en punkt för global åtkomst till ett objekt. Med andra ord måste du göra objektet tillgängligt var som helst i programmet. Tyvärr räcker det inte att bara skapa en global variabel, eftersom den inte är skrivskyddad: vem som helst kan ändra variabelns värde, så att objektets globala åtkomstpunkt kan gå förlorad. Dessa egenskaper hos en Singleton är nödvändiga, till exempel när du har ett objekt som fungerar med en databas, och du behöver komma åt databasen från olika delar av programmet. En Singleton kommer att se till att ingen skriver kod som ersätter den tidigare skapade instansen.
-
Hitta ett exempel på Singleton med lat initialisering.
-
Skapa tre singleton-klasser - Sol, Måne, Jord - i separata filer med samma princip.
-
GenomföraPlanetgränssnitt i klasserna Sol , Måne och Jord .
- I statiskt block av Solution -klassen anropareadKeyFromConsoleAndInitPlanetmetod.
-
ImplementerareadKeyFromConsoleAndInitPlanetmetod funktionalitet:
-
5.1. Läs en strängparameter från konsolen
-
5.2. Om parametern är lika med en avPlanetgränssnittets konstanter, skapa lämpliga Planet- objektet.
-
-
Du måste ge klassen ett privat statiskt fält som lagrar ett enda objekt:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Gör (standard)konstruktorn privat. Detta innebär att den inte kan nås utanför klassen och kommer inte att kunna returnera nya objekt:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Deklarera en statisk skapelsemetod som kommer att användas för att få singeln:
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