Programiranje

Kako uporabiti vzorec oblikovanja Memento v jeziku C #

Z vzorci oblikovanja rešujemo pogoste težave pri oblikovanju in zmanjšujemo zapletenost izvorne kode. Vzorec načrtovanja Memento je vedenjski vzorec načrtovanja, ki ga lahko uporabimo za zagotavljanje možnosti razveljavitve ali vračanja v aplikaciji ali preprosto za ponastavitev stanja predmeta v spletni aplikaciji ASP.Net. S shranjevanjem stanja predmeta na zunanjo lokacijo, imenovano Memento, ta vzorec omogoča, da se to stanje pozneje obnovi v predmetu. Raziščimo, kako lahko uporabimo vzorec oblikovanja Memento v C #.

Vsak predmet ima svoje notranje stanje. Memento nam daje način, da to stanje rešimo in obnovimo, pri tem pa še vedno spoštujemo načela inkapsulacije, ki narekujejo, da nejavni člani primerka razreda ne smejo biti na voljo zunanjemu svetu. To je zato, ker je Memento na voljo samo predmetu, katerega stanje je shranil.

Udeleženci v vzorcu oblikovanja Memento vključujejo Memento, Originator in skrbnik. Medtem ko razred Memento shranjuje stanje predmeta, Originator ustvari Memento in ga po potrebi obnovi. Skrbnik je odgovoren samo za shranjevanje Mementa - naj ne bi spreminjal primerka Memento.

Izvajanje vzorca Memento

V tem poglavju bomo izvedli vzorec oblikovanja Memento v jeziku C #. Ustvarili bomo preprost program, ki ima tri razrede - a Kalkulator razred, a Memento razreda in odjemalca, tj Glavna metoda.

Glejte Kalkulator razred spodaj.

  javni razred Kalkulator

    {

int rezultat;

javni kalkulator (int i = 0)

        {

rezultat = 0;

        }

javna void SetResult (int i = 0)

        {

this.result = 0;

        }

javna praznina Dodaj (int x)

        {

rezultat + = x;

        }

odštevanje javne praznine (int x)

        {

rezultat - = x;

        }

javni int GetResult ()

        {

vrniti rezultat;

        }

javni Memento CreateMemento ()

        {

Memento memento = novo Memento ();

memento.SetState (rezultat);

vrnitev spomin;

        }

javna praznina SaveState (Memento memento)

        {

rezultat = memento.GetState ();

        }

    }

Upoštevajte CreateMemento in SetMemento metode v Kalkulator razred. Medtem ko prvi ustvarja Momento na primer, slednji pridobi shranjeno stanje in dodeli vrednost nazaj spremenljivki rezultata.

Razred Memento

The Memento razred vsebuje dve metodi, SetState in GetState. Medtem ko se prvi uporablja za shranjevanje informacij o stanju, se drugi uporablja za pridobivanje shranjenega stanja.

javni razred Memento

    {

int stanje;

javni int GetState ()

        {

stanje vrnitve;

        }

javna void SetState (int state)

        {

this.state = stanje;

        }

    }

Stranka v tem primeru je Glavna metoda, ki ustvari primerek datoteke Kalkulator razreda in kliče na Dodaj in Odštej metode za izvajanje računanja. Poleg tega Glavna shrani podatke o državi na določeni kontrolni točki tako, da pokliče SaveState metoda. Kasneje se to shranjeno stanje obnovi in ​​vrednost spremenljivke rezultata se prikaže v oknu konzole. To je prikazano v spodnjem delčku kode.

  statična praznina Main (string [] args)

        {

Kalkulator kalkulatorja = nov kalkulator ();

kalkulator.Dodaj (5);

kalkulator.Dodaj (10);

kalkulator.Odštej (10);

Memento checkPoint = kalkulator.CreateMemento ();

kalkulator.Dodaj (100);

Console.WriteLine (“Vrednost spremenljivke rezultata je:“ + kalkulator.GetResult ());

kalkulator.SaveState (checkPoint);

Console.WriteLine (“Vrednost spremenljivke rezultata na prvi kontrolni točki je:“ + kalkulator.GetResult ());

Console.Read ();

        }

Popoln primer vzorca Memento

Tukaj je celoten program za vašo referenco.

razredni program

    {

statična praznina Main (string [] args)

        {

Kalkulator kalkulatorja = nov kalkulator ();

kalkulator.Dodaj (5);

kalkulator.Dodaj (10);

kalkulator.Odštej (10);

Memento checkPoint = kalkulator.CreateMemento ();

kalkulator.Dodaj (100);

Console.WriteLine (“Vrednost spremenljivke rezultata je:“ + kalkulator.GetResult ());

kalkulator.SaveState (checkPoint);

Console.WriteLine (“Vrednost spremenljivke rezultata na prvi kontrolni točki je:“ + kalkulator.GetResult ());

Console.Read ();

        }

    }

javni razred Kalkulator

    {

int rezultat;

javni kalkulator (int i = 0)

        {

rezultat = 0;

        }

javna void SetResult (int i = 0)

        {

this.result = 0;

        }

javna praznina Dodaj (int x)

        {

rezultat + = x;

        }

odštevanje javne praznine (int x)

        {

rezultat - = x;

        }

javni int GetResult ()

        {

vrniti rezultat;

        }

javni Memento CreateMemento ()

        {

Memento memento = novo Memento ();

memento.SetState (rezultat);

vrnitev spomin;

        }

javna praznina SetMemento (Memento memento)

        {

rezultat = memento.GetState ();

        }

    }

javni razred Memento

    {

int stanje;

javni int GetState ()

        {

stanje vrnitve;

        }

javna void SetState (int state)

        {

this.state = stanje;

        }

    }

Vzorec oblikovanja Memento nam nudi priročen način za shranjevanje in pridobivanje stanja predmeta. Ta vzorec lahko izkoristite za izvedbo razveljavitve ali povratka. Vendar pa je ena od slabosti uporabe tega vzorca ta, da postopek shranjevanja stanja predmeta in njegove poznejše obnove lahko traja kar nekaj časa - tj. Lahko škoduje delovanju aplikacije. Torej, pri uporabi vzorca Memento ne pozabite na uspešnost. Na koncu se prepričajte tudi, da notranja zgradba vašega predmeta ni izpostavljena zunanjemu svetu.

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