Mēs izmantojam dizaina modeļus, lai atrisinātu parastās dizaina problēmas un samazinātu avota koda sarežģītību. Memento noformējuma modelis ir uzvedības noformējuma modelis, ko var izmantot, lai nodrošinātu atsaukšanas vai atcelšanas iespējas lietojumprogrammā vai vienkārši atiestatītu objekta stāvokli, piemēram, ASP.Net tīmekļa lietojumprogrammā. Uzglabājot objekta stāvokli ārējā vietā, ko sauc par Memento, šis modelis ļauj šo stāvokli vēlāk atjaunot objektā. Izpētīsim, kā mēs varam izmantot Memento dizaina modeli C #.
Katram objektam ir savs iekšējais stāvoklis. Piemiņa dod mums iespēju glābt šo stāvokli un atjaunot to, vienlaikus ievērojot iekapsulēšanas principus, kas nosaka, ka klases instances nevalstniekiem nevajadzētu būt pieejamiem ārpasaulei. Tas ir tāpēc, ka Memento ir pieejams tikai objektam, kura stāvokli tas ir saglabājis.
Memento dizaina modeļa dalībnieku vidū ir Memento, Originator un Caretaker. Kamēr Memento klase saglabā objekta stāvokli, iniciators izveido Memento un vajadzības gadījumā to izmanto stāvokļa atjaunošanai. Apsaimniekotājs ir atbildīgs tikai par Memento glabāšanu - tam nevajadzētu mainīt Memento instanci.
Memento modeļa ieviešana
Šajā sadaļā mēs ieviesīsim Memento dizaina modeli C #. Mēs izveidosim vienkāršu programmu, kurā ir trīs klases - a Kalkulators
klase, a Piemiņa
klase, un klients, t.i. Galvenais
metodi.
Skatiet Kalkulators
klase, kas norādīta zemāk.
publiskās klases kalkulators{
int rezultāts;
publiskais kalkulators (int i = 0)
{
rezultāts = 0;
}
public void SetResult (int i = 0)
{
šis.rezultāts = 0;
}
public void Pievienot (int x)
{
rezultāts + = x;
}
public void Atņemt (int x)
{
rezultāts - = x;
}
public int GetResult ()
{
atgriešanās rezultāts;
}
publiskais Memento CreateMemento ()
{
Memento memento = jauns Memento ();
piemiņa.SetState (rezultāts);
atgriešanās piemiņa;
}
public void SaveState (Memento memento)
{
rezultāts = piemiņa.GetState ();
}
}
Ievērojiet CreateMemento
un SetMemento
metodes Kalkulators
klasē. Kamēr pirmais rada a Momento
Piemēram, pēdējais izgūst saglabāto stāvokli un piešķir vērtību atpakaļ mainīgajam.
Memento klase
The Piemiņa
klase satur divas metodes, SetState
un GetState
. Kamēr pirmo izmanto stāvokļa informācijas glabāšanai, otro izmanto saglabātā stāvokļa izgūšanai.
sabiedrības klase Memento{
int stāvoklis;
publiskais int GetState ()
{
atgriešanās stāvoklis;
}
public void SetState (int stāvoklis)
{
šī.valsts = valsts;
}
}
Šajā piemērā klients ir Galvenais
metode, kas izveido Kalkulators
klase un zvana uz Pievienot
un Atņemt
metodes skaitļošanas veikšanai. Papildus, Galvenais
saglabā valsts informāciju noteiktā kontrolpunktā, piezvanot uz SaveState
metodi. Vēlāk šis saglabāts stāvoklis tiek atjaunots, un konsoles logā tiek parādīta rezultāta mainīgā vērtība. Tas ir parādīts tālāk sniegtajā koda fragmentā.
static void Main (virkne [] args){
Kalkulatora kalkulators = jauns Kalkulators ();
kalkulators.Pievienot (5);
kalkulators.Pievienot (10);
kalkulators.Atņemt (10);
Memento pārbaude = kalkulators.CreateMemento ();
kalkulators.Pievienot (100);
Console.WriteLine (“Rezultāta mainīgā vērtība ir:“ + calculator.GetResult ());
kalkulators.SaveState (checkPoint);
Console.WriteLine (“Rezultāta mainīgā vērtība pirmajā kontrolpunktā ir:“ + calculator.GetResult ());
Konsole. Lasīt ();
}
Pilns Memento modeļa piemērs
Šeit ir norādīta visa programma.
klases programma{
static void Main (virkne [] args)
{
Kalkulatora kalkulators = jauns Kalkulators ();
kalkulators.Pievienot (5);
kalkulators.Pievienot (10);
kalkulators.Atņemt (10);
Memento pārbaude = kalkulators.CreateMemento ();
kalkulators.Pievienot (100);
Console.WriteLine (“Rezultāta mainīgā vērtība ir:“ + calculator.GetResult ());
kalkulators.SaveState (checkPoint);
Console.WriteLine (“Rezultāta mainīgā vērtība pirmajā kontrolpunktā ir:“ + calculator.GetResult ());
Konsole. Lasīt ();
}
}
publiskās klases kalkulators
{
int rezultāts;
publiskais kalkulators (int i = 0)
{
rezultāts = 0;
}
public void SetResult (int i = 0)
{
šis.rezultāts = 0;
}
public void Pievienot (int x)
{
rezultāts + = x;
}
public void Atņemt (int x)
{
rezultāts - = x;
}
public int GetResult ()
{
atgriešanās rezultāts;
}
publiskais Memento CreateMemento ()
{
Memento memento = jauns Memento ();
piemiņa.SetState (rezultāts);
atgriešanās piemiņa;
}
public void SetMemento (Memento memento)
{
rezultāts = piemiņa.GetState ();
}
}
sabiedrības klase Memento
{
int stāvoklis;
publiskais int GetState ()
{
atgriešanās stāvoklis;
}
public void SetState (int stāvoklis)
{
šī.valsts = valsts;
}
}
Memento dizaina modelis sniedz mums ērtu veidu, kā saglabāt un izgūt objekta stāvokli. Varat izmantot šo modeli, lai veiktu atsaukšanu vai atcelšanu. Tomēr viens no šī modeļa izmantošanas trūkumiem ir tas, ka objekta stāvokļa saglabāšana un atjaunošana vēlāk var aizņemt diezgan ilgu laiku, t.i., tas var kaitēt lietojumprogrammas veiktspējai. Tāpēc, izmantojot Memento modeli, noteikti paturiet prātā veiktspēju. Visbeidzot, pārliecinieties arī, ka jūsu objekta iekšējā struktūra nav pakļauta ārējai pasaulei.