Quick Tips: Singleton Pattern
Del
Del
Del
Del
Dette Cyber mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.
To ganger i måneden, vi besøker noen av våre lesere favoritt innlegg fra hele historien Activetuts +. Denne ukens retro-Active Quick Tips, utgitt første gang i juni 2010, er en introduksjon til en populær (men ofte mis-bruk) design mønster.
I denne hurtig Tips vi skal snakke om Singleton design mønsteret og hvordan det kan hjelpe deg til å optimalisere koden din når du trenger nøyaktig en forekomst av en klasse
Trinn 1:. Innledning
Som en programmerer du må være klar over at det er noen tilfeller der du ønsker å bruke en forekomst av en klasse, men du ønsker å lage bare en og holde det gjennom hele programmet. Vel, det er hva Singletons er for
Trinn 2:.? Hva er en Singleton
En Singleton er et objektorientert design Pattern brukes av mange programmerere; det kan du lage en slags "global" forekomst av en klasse. Den er laget på en slik måte at bare en unik forekomst kan eksistere, slik at alle forekomstene av klassen er i nøyaktig samme tilstand
Trinn 3:. Hvorfor skulle vi bruke det
?
Det vanligste eksempelet ville være en score - for eksempel en fotball poengsum. Du ville ha en Score Begge lagene må være i stand til å øke sin poengsum når de gjør et mål, men du kan ikke gi hvert lag sin egen Score eksempel; du vil ha både tilgang til og endre den samme en Dette er en sak der en enkelt er en perfekt løsning, siden det kan fungere som en global eksempel at noen kan få tilgang til.; du vil ha bare ett eksempel for alle, slik at du ikke trenger å bekymre deg for at hvert lag skal modifisere en annen poengsum La oss nå start skape et enkelt inne AS3, men først må du huske de viktigste elementene i en singleton. Opprett en ny AS3 klassen og kaller det Singleton.as (Ikke kjent med klassebasert koding? Sjekk ut denne rask intro) Her er den grunnleggende Singleton kode: Nå la oss gå og teste Singleton, først opprette en ny Flash-fil som heter Main.fla Opprett en ny klasse som heter "Main" og opprette en forekomst av Singleton bruke konstruktøren: Lagre og kjøre den, vil du se at det kaster en feil å fortelle oss å bruke getInstance () -funksjonen i stedet, så gå videre og gjøre det: Lagre og kjøre det, er det ingen feil nå, og du kan se i konsollen teksten "Singleton eksempel opprettet!", Noe som betyr at det ble opprettet. Så når du bruker en Singleton klasse, kan du ikke bruke ny Singleton () The Singleton er ikke veldig nyttig i minuttet. La oss legge en eiendom: Nå, i Main.as For å bevise at Singleton gjør det den er ment å gjøre, opprette en singleton og endre eksempel eiendom til en av dem: Hva tror du vil skje? Dette fungerer selv om du opprette Singleton variabler i forskjellige klasser. The Singleton mønsteret kan brukes på noen kode, og jeg anbefaler det hvis du skal bruke bare én forekomst av en klasse siden det gir deg bedre kontroll over det. Jeg håper du likte denne Quick Tips, takk for lesing! Saludos -Eduardo Anmeldelser
klasse, med egenskaper homeTeamScore Hotell og awayTeamScore Hotell og en metode som increaseScore (team: Team)
.
Trinn 4:. Singleton Class
Alle
må kunne få tilgang til det
Just ett
eksempel kan opprettes.
.
pakken {public class Singleton {private static Var eksempel:. Singleton; //Dette vil være en unik forekomst skapt av klassen private Static Var isOkayToCreate: Boolean = false; //Denne variabelen vil hjelpe oss å avgjøre om forekomsten kan opprettes offentlig funksjon Singleton () {//Hvis vi ikke kan opprette en forekomst, kaste en feil slik at ingen forekomsten blir opprettet if (isOkayToCreate!) Kaste nytt Feil (dette + "er en Singleton Tilgang ved hjelp getInstance ()."); } //Med denne metoden vil vi skape og få tilgang forekomsten av metoden public static funksjon getInstance (): Singleton {//Hvis det ikke er tilfelle, oppretter du den if (! Eksempel) {//tillate opprettelse av forekomsten, og etter at den er opprettet, stoppe lenger skapes isOkayToCreate = true; eksempel = new Singleton (); isOkayToCreate = false; spore ("Singleton eksempel opprettet!"); } Returnere eksempel; }}}
Trinn 5: Lag en Flash Prosjekt
. På egenskaper panelet satt klassen også til Hoved
Trinn 6:. Lag en Singleton
pakke {import flash.display.MovieClip; public class Hoved strekker MovieClip {offentlig funksjon main () {var testSingleton: Singleton = new Singleton (); }}}
pakke {import flash.display.MovieClip; public class Hoved strekker MovieClip {offentlig funksjon main () {var testSingleton: Singleton = Singleton.getInstance (); }}}
, må du bruke Singleton.getInstance ()
stedet
Trinn 7:. Legg Properties til Klasse
pakken {public class Singleton {private static Var eksempel: Singleton; //Dette vil være en unik forekomst skapt av klassen private Static Var isOkayToCreate: Boolean = false; //Denne variabelen vil hjelpe oss å avgjøre om forekomsten kan opprettes //nytt eksempel eiendom: public Var exampleProperty: String = "Dette er et eksempel"; (! isOkayToCreate) offentlig funksjon Singleton () {//Hvis vi ikke kan opprette en forekomst, kaste en feil slik at ingen forekomsten blir opprettet hvis kaste nytt Feil (dette + "er en Singleton Tilgang ved hjelp getInstance ()."); } //Med denne metoden vil vi skape og få tilgang forekomsten av metoden public static funksjon getInstance (): Singleton {//Hvis det ikke er tilfelle, oppretter du den if (! Eksempel) {//tillate opprettelse av forekomsten, og etter at den er opprettet, stoppe lenger skapes isOkayToCreate = true; eksempel = new Singleton (); isOkayToCreate = false; spore ("Singleton eksempel opprettet!"); } Returnere eksempel; }}}
, du kan få tilgang til testSingleton.exampleProperty
akkurat som om det var en vanlig klasse. Prøv å spore den ut
Trinn 8:. Prøv Opprette annen Singleton
pakke {import flash.display.MovieClip; public class Hoved strekker MovieClip {offentlig funksjon main () {var testSingleton: Singleton = Singleton.getInstance (); Var anotherSingleton: Singleton = Singleton.getInstance (); anotherSingleton.exampleProperty = "Dette er satt i anotherSingleton"; trace (testSingleton.exampleProperty, anotherSingleton.exampleProperty); }}}
Konklusjon