Programovanie

Ako používať návrhový vzor Memento v C #

Používame návrhové vzory na riešenie bežných problémov s návrhom a na zníženie zložitosti nášho zdrojového kódu. Návrhový vzor Memento je návrhový vzor správania, ktorý je možné použiť na zabezpečenie schopnosti vrátiť alebo vrátiť späť v aplikácii alebo napríklad na jednoduchú resetovanie stavu objektu vo webovej aplikácii ASP.Net. Uložením stavu objektu na externé miesto nazývané Memento umožňuje tento vzor tento stav obnoviť v objekte neskôr. Poďme preskúmať, ako môžeme použiť návrhový vzor Memento v C #.

Každý objekt má svoj vnútorný stav. Memento nám dáva spôsob, ako tento štát zachrániť a obnoviť ho pri súčasnom dodržiavaní zásad zapuzdrenia, ktoré nariaďujú, aby neverejní členovia inštancie triedy nemali byť k dispozícii vonkajšiemu svetu. Je to preto, lebo Memento je k dispozícii iba pre objekt, ktorého stav má uložené.

Medzi účastníkov návrhového vzoru Memento patria Memento, pôvodca a správca. Zatiaľ čo trieda Memento ukladá stav objektu, pôvodca vytvorí Memento a podľa potreby ho použije na obnovenie stavu. Správca je zodpovedný iba za uloženie Mementa - nemá to meniť inštanciu Mementa.

Implementácia vzoru Memento

V tejto časti implementujeme návrhový vzor Memento v C #. Vytvoríme jednoduchý program, ktorý má tri triedy - a Kalkulačka trieda, a Memento triedy a klient, t. j Hlavný metóda.

Pozrite si Kalkulačka trieda uvedená nižšie.

  kalkulačka verejnej triedy

    {

int výsledok;

verejná kalkulačka (int i = 0)

        {

výsledok = 0;

        }

public void SetResult (int i = 0)

        {

this.result = 0;

        }

public void Add (int x)

        {

výsledok + = x;

        }

public void Subtract (int x)

        {

výsledok - = x;

        }

public int GetResult ()

        {

návratový výsledok;

        }

verejné Memento CreateMemento ()

        {

Memento memento = nové Memento ();

memento.SetState (výsledok);

spomienka na návrat;

        }

public void SaveState (Memento memento)

        {

výsledok = memento.GetState ();

        }

    }

Všimnite si CreateMemento a SetMemento metódy v Kalkulačka trieda. Zatiaľ čo prvý vytvára a Momento inštancia načíta uložený stav a priradí hodnotu späť výslednej premennej.

Trieda Memento

The Memento trieda obsahuje dve metódy, SetState a GetState. Zatiaľ čo prvé sa používa na ukladanie informácií o stave, druhé sa používa na získanie uloženého stavu.

verejná trieda Memento

    {

int stav;

public int GetState ()

        {

návratový stav;

        }

public void SetState (int stav)

        {

this.state = state;

        }

    }

Klientom v tomto príklade je Hlavný metóda, ktorá vytvorí inštanciu súboru Kalkulačka triedy a volá na Pridať a Odčítať metódy vykonávania výpočtu. Navyše, Hlavný uloží informácie o stave na konkrétnom kontrolnom mieste volaním na server SaveState metóda. Neskôr sa tento uložený stav obnoví a hodnota výslednej premennej sa zobrazí v okne konzoly. To ilustruje útržok kódu uvedený nižšie.

  static void Main (reťazec [] args)

        {

Kalkulačka kalkulačka = nová Kalkulačka ();

kalkulačka. Pridať (5);

kalkulačka. Pridať (10);

kalkulačka. Odčítanie (10);

Memento checkPoint = calculator.CreateMemento ();

kalkulačka. Pridať (100);

Console.WriteLine („Hodnota výslednej premennej je:„ + calculator.GetResult ());

calculator.SaveState (checkPoint);

Console.WriteLine („Hodnota výslednej premennej v prvom kontrolnom bode je:„ + calculator.GetResult ());

Console.Read ();

        }

Kompletný príklad vzoru Memento

Tu je kompletný program pre vašu potrebu.

triedny program

    {

static void Main (reťazec [] args)

        {

Kalkulačka kalkulačka = nová Kalkulačka ();

kalkulačka. Pridať (5);

kalkulačka. Pridať (10);

kalkulačka. Odčítanie (10);

Memento checkPoint = calculator.CreateMemento ();

kalkulačka. Pridať (100);

Console.WriteLine („Hodnota výslednej premennej je:„ + calculator.GetResult ());

calculator.SaveState (checkPoint);

Console.WriteLine („Hodnota výslednej premennej v prvom kontrolnom bode je:„ + calculator.GetResult ());

Console.Read ();

        }

    }

kalkulačka verejnej triedy

    {

int výsledok;

verejná kalkulačka (int i = 0)

        {

výsledok = 0;

        }

public void SetResult (int i = 0)

        {

this.result = 0;

        }

public void Add (int x)

        {

výsledok + = x;

        }

public void Subtract (int x)

        {

výsledok - = x;

        }

public int GetResult ()

        {

návratový výsledok;

        }

verejné Memento CreateMemento ()

        {

Memento memento = nové Memento ();

memento.SetState (výsledok);

spomienka na návrat;

        }

public void SetMemento (Memento memento)

        {

výsledok = memento.GetState ();

        }

    }

verejná trieda Memento

    {

int stav;

public int GetState ()

        {

návratový stav;

        }

public void SetState (int stav)

        {

this.state = state;

        }

    }

Dizajnový vzor Memento nám poskytuje praktický spôsob ukladania a načítania stavu objektu. Tento vzor môžete využiť na vykonanie vrátenia alebo vrátenia. Jednou z nevýhod použitia tohto vzoru je však to, že proces ukladania stavu objektu a jeho neskoršia obnova môže trvať pomerne dlho - môže to mať nepriaznivý vplyv na výkon aplikácie. Pri používaní vzoru Memento teda nezabudnite na výkon. Nakoniec sa tiež uistite, že vnútorná štruktúra vášho objektu nie je vystavená vonkajšiemu svetu.

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