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.