Singleton-designmønsteret er et mye brukt designmønster i objektorientert programmering, da det sikrer at bare en klasseforekomst opprettes, og for å få tilgang til det gir et globalt tilgangspunkt. Dette betyr at hver forespørsel om en forekomst av klassen returnerer samme forekomst, i stedet for å opprette en ny.
Singleton designmønster i C#
Singleton -mønsteret er kjent for sin enkelhet og effektivitet for å sikre at det bare er en forekomst av klassen, noe som gjør det til et populært valg for mange programvareutviklere. Singleton -mønsteret brukes ofte for å sikre at et enkelt tilgangspunkt eksisterer til en delt ressurs eller en tjeneste, her er syntaks for å bruke det:
Offentlig forseglet klasse
Privat statisk readonlyforekomst = nytt ();
privat()
offentlig statiskForekomst
få
Returforekomst;
Det forseglede nøkkelordet brukes til å forhindre at klassen blir arvet, og forekomstfeltet er merket som leses bare for å sikre at den bare kan initialiseres en gang, og det initialiseres ved erklæring med en enkelt forekomst av klassen. Konstruktøren er merket som privat for å forhindre ekstern oppstart av klassen, og forekomstegenskapen gir en måte å få tilgang til enkeltforekomsten av klassen og er merket som statisk slik at den kan nås uten å lage en forekomst av klassen.
I C# er et singleton -mønster vanligvis implementert ved hjelp av en privat konstruktør, et statisk forekomstfelt og en offentlig statisk egenskap eller metode for å få tilgang til forekomsten. Den grunnleggende ideen er å sikre at bare en forekomst av klassen kan eksistere ved å kontrollere hvordan den blir instantiert og tilgjengelig, her er et eksempelkode som demonstrerer opprettelsen og bruken av singleton designmønster i C#:
ved hjelp av system;
// definere kalkulatorklassen med en privat konstruktør og et statisk forekomstfelt
Offentlig forseglet klassekalkulator
privat statisk kalkulatorforekomst;
Privat kalkulator () // Privat konstruktør forhindrer instantiering av kalkulatorklasse utenfor selve klassen
// definere forekomstegenskapen, som oppretter et nytt kalkulatorobjekt hvis man ikke allerede eksisterer og returnerer det
Offentlig statisk kalkulatorforekomst
få
if (forekomst == null) // sjekk om et kalkulatorobjekt allerede er opprettet
forekomst = ny kalkulator (); // Hvis ikke, oppretter du et nytt kalkulatorobjekt og tilordner det til forekomstfeltet
Returforekomst;
public int add (int x, int y)
returner x + y;
// definere trekkmetoden, som trekker et heltall fra et annet og returnerer resultatet
Offentlig int Trekker (int x, int y)
Returner x - y;
// definere programklassen med en hovedmetode
Klasseprogram
statisk tomrom (streng [] args)
Kalkulator Calc = kalkulator.Forekomst; // Få en forekomst av kalkulatorobjektet ved hjelp av forekomstegenskapen
int resultat1 = beregnet.Legg til (5, 7); // Bruk ADD -metoden for å legge til 5 og 7 sammen
Konsoll.WritLine ($ "Resultat1: resultat1"); // Output Resultatet av tillegg til konsollen
int resultat2 = beregnet.Trekk (10, 3); // Bruk trekkmetoden til å trekke 3 fra 10
Konsoll.WritLine ($ "Resultat2: resultat2"); // Output resultatet av subtraksjonen til konsollen
I dette eksemplet er kalkulatorklassen definert med en privat konstruktør og et statisk forekomstfelt. Den private konstruktøren forhindrer at klassen blir instantiert fra utenfor selve klassen, mens det statiske forekomstfeltet sikrer at bare en forekomst av klassen kan eksistere om gangen.
Kalkulatorklassen inkluderer også en forekomstegenskap, som oppretter et nytt kalkulatorobjekt hvis man ikke allerede eksisterer og returnerer den. Første gang forekomstegenskapen kalles, oppretter den et nytt kalkulatorobjekt og tildeler det til forekomstfeltet, eventuelle påfølgende anrop til forekomstegenskap.
Kalkulatorklassen inkluderer også ADD- og trekke metoder, som utfører grunnleggende aritmetiske operasjoner og returnerer resultatet. Disse metodene er nettopp inkludert som et eksempel på den typen funksjonalitet som kalkulatorklassen kan gi.
Til slutt inkluderer programklassen en hovedmetode, som oppretter en forekomst av kalkulatorklassen ved hjelp av forekomstegenskapen og bruker ADD- og trekke metoder for å utføre noen enkle beregninger. Resultatene fra disse beregningene blir deretter gitt ut til konsollen ved bruk av konsollen.WritLine -metoden.
Hvis vi prøver å opprette en ny forekomst av kalkulatorklassen ved hjelp av standardkonstruktøren. Dette vil ikke fungere fordi konstruktøren av kalkulatorklassen er privat, noe som forhindrer at nye forekomster blir opprettet utenfor klassen.
For å demonstrere opprettet jeg en ny forekomst av kalkulatorklassen ved å bruke forekomstegenskapen til klassen, og i utdataene vil det være en feil som sier at denne klassen er utilgjengelig på grunn av beskyttelsesnivået:
Ved å demonstrere at nye forekomster blir avvist av Singleton -mønsteret i C#, viser dette eksemplet hvordan Singleton -mønsteret sikrer at bare en klasseforekomst er opprettet og vedlikeholdt i hele programmet.
Konklusjon
Singleton -mønsteret brukes ofte i situasjoner der et enkelt objekt må koordinere handlinger over hele systemet, for eksempel en loggingstjeneste eller en databaseforbindelse. Mønsteret implementeres ved hjelp av en privat konstruktør og en statisk egenskap som returnerer en enkelt forekomst av klassen, denne artikkelen gir en detaljert forklaring om dette mønsteret.