Programavimas

Kaip naudoti „Memento“ dizaino modelį C #

Mes naudojame dizaino modelius, kad išspręstume įprastas dizaino problemas ir sumažintume šaltinio kodo sudėtingumą. „Memento“ dizaino modelis yra elgesio dizaino modelis, kuris gali būti naudojamas norint suteikti anuliavimo ar grąžinimo galimybę programoje arba paprasčiausiai atstatyti, pavyzdžiui, ASP.Net žiniatinklio programos objekto būseną. Saugant objekto būseną išorinėje vietoje, vadinamoje „Memento“, šis modelis leidžia tą būseną atkurti objekte vėliau. Panagrinėkime, kaip galime naudoti „Memento“ dizaino modelį C #.

Kiekvienas daiktas turi savo vidinę būseną. Prisiminimas suteikia mums būdą išsaugoti šią būseną ir ją atkurti, vis tiek laikantis inkapsuliacijos principų, kurie nurodo, kad nevieši klasės egzemplioriaus nariai neturėtų būti prieinami išoriniam pasauliui. Taip yra todėl, kad „Memento“ yra prieinamas tik objektui, kurio būseną jis išsaugojo.

„Memento“ dizaino modelio dalyviai yra „Memento“, „Originator“ ir „Caretaker“. Nors „Memento“ klasė saugo objekto būseną, „Originator“ sukuria „ementement “ir prireikus naudoja ją būsenai atkurti. Prižiūrėtojas yra atsakingas tik už „Memento“ saugojimą - jis neturėtų pakeisti „Memento“ egzemplioriaus.

„Memento“ modelio įgyvendinimas

Šiame skyriuje mes įgyvendinsime „Memento“ dizaino modelį C #. Sukursime paprastą programą, kurią sudarys trys klasės - a Skaičiuoklė klasė, a Atmintinė klasės, o klientas, t Pagrindinis metodas.

Žr Skaičiuoklė klasė pateikta žemiau.

  viešosios klasės skaičiuoklė

    {

int rezultatas;

viešoji skaičiuoklė (int i = 0)

        {

rezultatas = 0;

        }

public void „SetResult“ (int i = 0)

        {

tai.rezultatas = 0;

        }

public void Pridėti (int x)

        {

rezultatas + = x;

        }

public void Atimtis (int x)

        {

rezultatas - = x;

        }

viešasis „GetResult“ ()

        {

grąžinimo rezultatas;

        }

public Memento CreateMemento ()

        {

Atminties atminimas = naujas atminimas ();

atminimas.SetState (rezultatas);

grįžimo atminimas;

        }

public void „SaveState“ („Memento memento“)

        {

rezultatas = atminimas.GetState ();

        }

    }

Atkreipkite dėmesį į „CreateMemento“ ir „SetMemento“ metodai Skaičiuoklė klasė. Nors pirmasis sukuria a Momento Pavyzdžiui, pastaroji nuskaito išsaugotą būseną ir priskiria reikšmę rezultato kintamajam.

„Memento“ klasė

Atmintinė klasėje yra du metodai, „SetState“ ir „GetState“. Pirmasis naudojamas valstybės informacijai saugoti, antrasis - išsaugotai būsenai gauti.

visuomenės klasė „Memento“

    {

int valstija;

viešasis „GetState“ ()

        {

grįžimo būsena;

        }

public void „SetState“ (int būsena)

        {

this.state = valstija;

        }

    }

Šiame pavyzdyje klientas yra Pagrindinis metodas, sukuriantis Skaičiuoklė klasę ir skambina į Papildyti ir Atimkite skaičiavimo metodai. Papildomai, Pagrindinis išsaugo valstybės informaciją konkrečiame kontrolės punkte paskambindamas į „SaveState“ metodas. Vėliau ši išsaugota būsena atkuriama, o rezultato kintamojo vertė rodoma konsolės lange. Tai iliustruojama toliau pateiktame kodo fragmente.

  static void Main (string [] args)

        {

Skaičiuoklės skaičiuoklė = nauja skaičiuoklė ();

skaičiuoklė.Pridėti (5);

skaičiuoklė.Pridėti (10);

skaičiuoklė. Atimtis (10);

„Memento checkPoint“ = skaičiuoklė.CreateMemento ();

skaičiuoklė.Pridėti (100);

Console.WriteLine („Rezultato kintamojo reikšmė yra:„ + calculator.GetResult ());

skaičiuoklė.SaveState (checkPoint);

Console.WriteLine („Rezultato kintamojo vertė pirmajame kontrolės punkte yra:„ + calculator.GetResult ());

Pultas.Skaitykite ();

        }

Visas „Memento“ modelio pavyzdys

Čia yra visa jūsų nuoroda.

klasės programa

    {

static void Main (string [] args)

        {

Skaičiuoklės skaičiuoklė = nauja skaičiuoklė ();

skaičiuoklė.Pridėti (5);

skaičiuoklė.Pridėti (10);

skaičiuoklė. Atimtis (10);

„Memento checkPoint“ = skaičiuoklė.CreateMemento ();

skaičiuoklė.Pridėti (100);

Console.WriteLine („Rezultato kintamojo reikšmė yra:„ + calculator.GetResult ());

skaičiuoklė.SaveState (checkPoint);

Console.WriteLine („Rezultato kintamojo vertė pirmajame patikros taške yra:„ + calculator.GetResult ());

Pultas.Skaitykite ();

        }

    }

viešosios klasės skaičiuoklė

    {

int rezultatas;

viešoji skaičiuoklė (int i = 0)

        {

rezultatas = 0;

        }

public void „SetResult“ (int i = 0)

        {

tai.rezultatas = 0;

        }

public void Pridėti (int x)

        {

rezultatas + = x;

        }

public void Atimtis (int x)

        {

rezultatas - = x;

        }

viešasis „GetResult“ ()

        {

grąžinimo rezultatas;

        }

public Memento CreateMemento ()

        {

Atminties atminimas = naujas atminimas ();

atminimas.SetState (rezultatas);

grįžimo atminimas;

        }

public void „SetMemento“ („Memento memento“)

        {

rezultatas = atminimas.GetState ();

        }

    }

visuomenės klasė „Memento“

    {

int valstija;

viešasis „GetState“ ()

        {

grįžimo būsena;

        }

public void „SetState“ (int būsena)

        {

this.state = valstija;

        }

    }

„Memento“ dizaino modelis suteikia mums patogų būdą saugoti ir gauti objekto būseną. Galite pasinaudoti šiuo modeliu, kad atliktumėte anuliavimą ar grąžinimą. Tačiau vienas iš šio modelio naudojimo trūkumų yra tas, kad objekto būsenos išsaugojimo ir vėlesnio atkūrimo procesas gali užtrukti gana ilgai, ty, tai gali pakenkti programos veikimui. Taigi, naudodami „Memento“ modelį, nepamirškite apie našumą. Galiausiai taip pat įsitikinkite, kad jūsų objekto vidinė struktūra nėra veikiama išorinio pasaulio.

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