Programování

Jak používat návrhový vzor Memento v C #

K řešení běžných návrhových problémů a snížení složitosti našeho zdrojového kódu používáme návrhové vzory. Návrhový vzor Memento je návrhový vzor chování, který lze použít k poskytnutí možnosti vrácení nebo vrácení zpět v aplikaci nebo jednoduše k resetování stavu objektu například ve webové aplikaci ASP.Net. Uložením stavu objektu do externího umístění zvaného Memento umožňuje tento vzor tento stav obnovit v objektu později. Prozkoumejme, jak můžeme použít návrhový vzor Memento v C #.

Každý objekt má svůj vnitřní stav. Memento nám dává způsob, jak tento stát zachránit a obnovit, a přitom stále dodržovat zásady zapouzdření, které diktují, že neveřejní členové instance třídy by neměli být k dispozici vnějšímu světu. Důvodem je, že Memento je k dispozici pouze pro objekt, jehož stav má uložený.

Mezi účastníky návrhového vzoru Memento patří Memento, Původce a Správce. Zatímco třída Memento ukládá stav objektu, Originator vytvoří Memento a podle potřeby jej použije k obnovení stavu. Správce je odpovědný pouze za ukládání Mementa - nemá to měnit instanci Mementa.

Implementace vzoru Memento

V této části implementujeme návrhový vzor Memento v C #. Vytvoříme jednoduchý program, který má tři třídy - a Kalkulačka třída, a Memento třída a klient, tj Hlavní metoda.

Odkazovat na Kalkulačka třída uvedená níže.

  kalkulačka veřejné třídy

    {

int výsledek;

veřejná kalkulačka (int i = 0)

        {

výsledek = 0;

        }

public void SetResult (int i = 0)

        {

this.result = 0;

        }

public void Přidat (int x)

        {

výsledek + = x;

        }

public void Odečíst (int x)

        {

výsledek - = x;

        }

public int GetResult ()

        {

vrátit výsledek;

        }

veřejné Memento CreateMemento ()

        {

Memento memento = nové Memento ();

memento.SetState (výsledek);

návratové upomínkové předměty;

        }

public void SaveState (Memento memento)

        {

result = memento.GetState ();

        }

    }

Všimněte si CreateMemento a SetMemento metody v Kalkulačka třída. Zatímco první vytváří a Momento instance načte uložený stav a přiřadí hodnotu zpět výsledné proměnné.

Třída Memento

The Memento třída obsahuje dvě metody, SetState a GetState. Zatímco první se používá k ukládání informací o stavu, druhá se používá k načtení uloženého stavu.

veřejná třída Memento

    {

int stav;

public int GetState ()

        {

návratový stav;

        }

public void SetState (int state)

        {

this.state = state;

        }

    }

Klientem v tomto příkladu je Hlavní metoda, která vytvoří instanci Kalkulačka třídy a volá do Přidat a Odčítat metody provádění výpočtu. Navíc, Hlavní uloží informace o stavu na určitém kontrolním bodě zavoláním na SaveState metoda. Později se tento uložený stav obnoví a hodnota výsledné proměnné se zobrazí v okně konzoly. To je znázorněno na fragmentu kódu uvedeném níže.

  static void Main (řetězec [] args)

        {

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

kalkulačka. Přidat (5);

kalkulačka. Přidat (10);

calculator.Subtract (10);

Memento checkPoint = calculator.CreateMemento ();

kalkulačka. Přidat (100);

Console.WriteLine („Hodnota výsledné proměnné je:“ + calculator.GetResult ());

calculator.SaveState (checkPoint);

Console.WriteLine („Hodnota výsledné proměnné na prvním kontrolním bodě je:“ + calculator.GetResult ());

Console.Read ();

        }

Kompletní příklad vzoru Memento

Zde je kompletní program pro vaši referenci.

třídní program

    {

static void Main (řetězec [] args)

        {

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

kalkulačka. Přidat (5);

kalkulačka. Přidat (10);

calculator.Subtract (10);

Memento checkPoint = calculator.CreateMemento ();

kalkulačka. Přidat (100);

Console.WriteLine („Hodnota výsledné proměnné je:“ + calculator.GetResult ());

calculator.SaveState (checkPoint);

Console.WriteLine („Hodnota výsledné proměnné na prvním kontrolním bodě je:“ + calculator.GetResult ());

Console.Read ();

        }

    }

kalkulačka veřejné třídy

    {

int výsledek;

veřejná kalkulačka (int i = 0)

        {

výsledek = 0;

        }

public void SetResult (int i = 0)

        {

this.result = 0;

        }

public void Přidat (int x)

        {

výsledek + = x;

        }

public void Odečíst (int x)

        {

výsledek - = x;

        }

public int GetResult ()

        {

vrátit výsledek;

        }

veřejné Memento CreateMemento ()

        {

Memento memento = nové Memento ();

memento.SetState (výsledek);

návratové upomínky;

        }

public void SetMemento (Memento memento)

        {

result = memento.GetState ();

        }

    }

veřejná třída Memento

    {

int stav;

public int GetState ()

        {

návratový stav;

        }

public void SetState (int state)

        {

this.state = state;

        }

    }

Návrhový vzor Memento nám poskytuje praktický způsob ukládání a načítání stavu objektu. Tento vzor můžete využít k provedení vrácení nebo vrácení zpět. Jednou z nevýhod použití tohoto vzoru je však to, že proces ukládání stavu objektu a jeho obnovení později může trvat poměrně dlouho - tj. Může to mít negativní dopad na výkon aplikace. Když tedy používáte vzor Memento, nezapomeňte mít na paměti výkon. Nakonec se také ujistěte, že vnitřní struktura vašeho objektu není vystavena vnějšímu světu.

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