Programmering

Slik bruker du Memento-designmønsteret i C #

Vi bruker designmønstre for å løse vanlige designproblemer og redusere kompleksiteten i kildekoden. Memento designmønsteret er et atferdsmønster som kan brukes til å gi en angre- eller tilbakeføringsfunksjon i et program, eller bare for å tilbakestille tilstanden til et objekt i en ASP.Net-webapplikasjon, for eksempel. Ved å lagre et objekts tilstand til et eksternt sted kalt Memento, gjør dette mønsteret det mulig å gjenopprette tilstanden til objektet på et senere tidspunkt. La oss utforske hvordan vi kan bruke Memento-designmønsteret i C #.

Hvert objekt har sin indre tilstand. Et minne gir oss en måte å redde den staten og gjenopprette den mens vi fortsatt overholder prinsippene for innkapsling, som tilsier at ikke-offentlige medlemmer av en forekomst av en klasse ikke skal være tilgjengelig for omverdenen. Dette er fordi Memento bare er tilgjengelig for objektet hvis tilstand det har lagret.

Deltakerne i Memento-designmønsteret inkluderer et Memento, en opphavsmann og en vaktmester. Mens Memento-klassen lagrer tilstanden til objektet, oppretter Oppretteren Memento og bruker den til å gjenopprette tilstanden når det er nødvendig. Vaktmesteren er kun ansvarlig for lagring av Memento-det er ikke ment å endre Memento-forekomsten.

Implementering av Memento-mønsteret

I denne delen vil vi implementere Memento designmønsteret i C #. Vi vil lage et enkelt program som har tre klasser - a Kalkulator klasse, en Minne klassen, og klienten, dvs. Hoved metode.

Referere til Kalkulator klasse gitt nedenfor.

  offentlig klasse Kalkulator

    {

int resultat;

offentlig kalkulator (int i = 0)

        {

resultat = 0;

        }

offentlig ugyldig SetResult (int i = 0)

        {

this.result = 0;

        }

offentlig tomrom Legg til (int x)

        {

resultat + = x;

        }

public void Subtract (int x)

        {

resultat - = x;

        }

offentlig int GetResult ()

        {

returresultat;

        }

offentlig Memento CreateMemento ()

        {

Memento memento = nytt Memento ();

memento.SetState (resultat);

tilbake minnesmerke;

        }

offentlig ugyldig SaveState (Memento memento)

        {

resultat = memento.GetState ();

        }

    }

Legg merke til CreateMemento og SetMemento metoder i Kalkulator klasse. Mens førstnevnte skaper en Momento for eksempel henter sistnevnte den lagrede tilstanden og tilordner verdien tilbake til resultatvariabelen.

Memento-klassen

De Minne klasse inneholder to metoder, SetState og GetState. Mens førstnevnte brukes til å lagre tilstandsinformasjonen, brukes sistnevnte til å hente den lagrede tilstanden.

offentlig klasse Memento

    {

int-tilstand;

offentlig int GetState ()

        {

returstatus;

        }

offentlig ugyldig SetState (int-tilstand)

        {

this.state = state;

        }

    }

Klienten i dette eksemplet er Hoved metode som skaper en forekomst av Kalkulator klasse og ringer til Legge til og Trekke fra metoder for å utføre beregning. I tillegg, Hoved lagrer tilstandsinformasjonen ved et bestemt kontrollpunkt ved å ringe til SaveState metode. Senere gjenopprettes denne lagrede tilstanden og verdien av resultatvariabelen vises i konsollvinduet. Dette er illustrert i kodebiten gitt nedenfor.

  statisk tomrom Main (streng [] args)

        {

Kalkulator kalkulator = ny Kalkulator ();

kalkulator.Legg til (5);

kalkulator.Legg til (10);

kalkulator.Trekk (10);

Memento checkPoint = kalkulator.CreateMemento ();

kalkulator.Legg til (100);

Console.WriteLine (“Verdien av resultatvariabelen er:“ + calculator.GetResult ());

kalkulator.SaveState (checkPoint);

Console.WriteLine (“Verdien av resultatvariabelen ved første kontrollpunkt er:“ + calculator.GetResult ());

Console.Read ();

        }

Det komplette eksemplet på Memento-mønster

Her er det komplette programmet for din referanse.

klasse Program

    {

statisk tomrom Main (streng [] args)

        {

Kalkulator kalkulator = ny Kalkulator ();

kalkulator.Legg til (5);

kalkulator.Legg til (10);

kalkulator.Trekk (10);

Memento checkPoint = kalkulator.CreateMemento ();

kalkulator.Legg til (100);

Console.WriteLine (“Verdien av resultatvariabelen er:“ + calculator.GetResult ());

kalkulator.SaveState (checkPoint);

Console.WriteLine (“Verdien av resultatvariabelen ved første kontrollpunkt er:“ + calculator.GetResult ());

Console.Read ();

        }

    }

offentlig klasse Kalkulator

    {

int resultat;

offentlig kalkulator (int i = 0)

        {

resultat = 0;

        }

offentlig ugyldig SetResult (int i = 0)

        {

this.result = 0;

        }

offentlig tomrom Legg til (int x)

        {

resultat + = x;

        }

public void Subtract (int x)

        {

resultat - = x;

        }

offentlig int GetResult ()

        {

returresultat;

        }

offentlig Memento CreateMemento ()

        {

Memento memento = nytt Memento ();

memento.SetState (resultat);

tilbake minnesmerke;

        }

offentlig ugyldighet SetMemento (Memento memento)

        {

resultat = memento.GetState ();

        }

    }

offentlig klasse Memento

    {

int-tilstand;

offentlig int GetState ()

        {

returstatus;

        }

offentlig ugyldig SetState (int-tilstand)

        {

this.state = state;

        }

    }

Memento designmønsteret gir oss en praktisk måte å lagre og hente gjenstandens tilstand på. Du kan dra nytte av dette mønsteret for å utføre en angre eller tilbakestilling. En av ulempene ved å bruke dette mønsteret er imidlertid at prosessen med å lagre et objekts tilstand og gjenopprette det senere kan ta ganske lang tid - det vil si at det kan være skadelig for applikasjonens ytelse. Så når du bruker Memento-mønsteret, må du huske på ytelsen. Til slutt, vær også sikker på at den indre strukturen til objektet ikke blir utsatt for omverdenen.

$config[zx-auto] not found$config[zx-overlay] not found