Programmēšana

Kā izmantot prototipa dizaina modeli .NET

Dizaina modeļi tiek izmantoti, lai atrisinātu atkārtotas problēmas un sarežģījumus programmatūras izstrādē. Prototipa modelis pieder radošo dizaina modeļu kategorijai un tiek izmantots, lai izveidotu objekta klonu. Radošie dizaina modeļi ir saistīti ar objekta izveidi un objekta izveides procesa pārvaldību jūsu lietojumprogrammā. Tipiski dizaina modeļu piemēri, kas ietilpst radošo modeļu kategorijā, ir abstraktie rūpnīcas, celtnieka, rūpnīcas metode, prototips un vienreizējie modeļi.

Dizaina prototipa modelis ļauj no esošās instances izveidot jaunu klases instanci. Jūs varat izmantot šī dizaina modeļa priekšrocības, lai izveidotu objekta klonu, ja pats objekta izveides process ir dārga lieta. Ņemiet vērā, ka klonēšana ir definēta kā objekta precīzas kopijas izveides process. Ir divi klonēšanas veidi: dziļa kopija un sekla kopija.

Sekla kopija pret dziļu kopiju klonēšanu

Sekla kopēšana tiek veikta, izmantojot Object.MemberwiseClone metodi un kopējot objekta laukus, kas nav statiski, savukārt dziļo kopiju izmanto, lai kopētu gan atsauces, gan vērtību tipus un piešķir jums atšķirīgu objekta eksemplāru. Šeit varat uzzināt vairāk padziļinātu un sekla kopiju no mana raksta.

Dalībnieki (klases un objekti) prototipa modeļa tipiskā ieviešanā ietver:

  • Prototips - tas nosaka interfeisu pašas klonēšanai
  • ConcretePrototype - tas definē tipu, kas īsteno pašu klonēšanas darbību
  • Klients - tas nosaka patērētāju, kurš var izveidot jaunu instanci, klonējot prototipu

Paturot to prātā, mēs šeit ieviesīsim prototipa modeli, izmantojot trīs veidus. Tie ietver sekojošo:

  • Klients
  • CustomerManager
  • Klienta prototips

Izveidojiet .NET abstraktās klases prototipu

Skatiet zemāk norādīto klasei CustomerPrototype.

[Serializējams ()]

publiskā abstraktā klase CustomerPrototype

    {

publisks abstrakts ClientPrototype Clone (bool performDeepCopy);

    }

Klase CustomerPrototype ir abstrakta un satur vienu abstraktu metodi ar nosaukumu Clone. Šī metode pieņem Būla parametru ar nosaukumu performDeepCopy. Ja tam nodotais parametrs ir patiess, tas veiks dziļu kopiju, citādi seklu kopiju.

Izveidojiet konkrētu prototipa klasi .NET

Tālāk tiek dota klase CustomerManager. Tajā ir vārdnīca, kas tajā glabā Klientu klases (tā ir tikai vēl viena POCO klase) gadījumus. Tajā ir arī indeksētājs ar nosaukumu CustomerPrototype. Indeksētāja iestatītais rekvizīts tiek izmantots datu glabāšanai vārdnīcas instancē ar nosaukumu klienti.

  publiskās klases CustomerManager

    {

privātās vārdnīcas klienti = new Dictionary ();

public CustomerPrototipējiet šo [int indeksu]

        {

iegūt {atgriešanās klientus [rādītājs]; }

iestatīt {klientus.Pievienot (indekss, vērtība); }

        }

    }

Izveidojiet .NET klientu klases prototipu

Klientu klase tiek dota tālāk. Tas satur divas īpašības, proti, FirstName un LastName, un divas metodes, Clone un DeepCopy.

[Serializējams ()]

publiskā klase Klients: CustomerPrototype

    {

publiskā virkne Vārds

        {

sagatavojies;

        }

publiskā virkne Uzvārds

        {

gūt; komplekts;

        }

publiski ignorēt klienta prototipa klonu (bool deepClone)

        {

slēdzis (deepClone)

            {

taisnība:

atdodiet šo. DeepCopy (tas) kā CustomerPrototype;

nepatiesa lieta:

atdodiet šo. MemberwiseClone () kā CustomerPrototype;

noklusējums:

atdodiet šo. MemberwiseClone () kā CustomerPrototype;

            }

        }

privātā T DeepCopy (T obj)

        {

// Uzrakstiet kodu šeit, lai veiktu dziļu kopēšanu.

        }

     }

Iepriekš norādītajā kodu sarakstā esmu izlaidis DeepCopy metodes avota kodu, jo tas jau ir pieejams manā iepriekšējā rakstā šeit.

Izveidojiet .NET objekta dziļu kopiju

Šis koda fragments parāda, kā jūs varat izmantot iepriekš izveidotās CustomerManager klases priekšrocības, lai veiktu dziļu kopiju.

CustomerManager customerManager = jauns CustomerManager ();

Klienta custObj1 = jauns klients ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

Klienta custObj2 = jauns klients ();

custObj2.FirstName = "Stefans";

custObj2.LastName = "Smits";

customerManager [1] = custObj2;

Klienta klients = customerManager [0]. Klons (patiess) kā klients;

Ņemiet vērā, ka mēs esam nodevuši “true” kā parametru Clone metodei, lai veiktu dziļu kopiju.

Izveidojiet seklu objekta kopiju .NET

Līdzīgi jūs varētu nodot “false” kā parametru tai pašai metodei, lai veiktu seklu kopiju. Lūk, kā jūs to varat sasniegt.

Klienta klients = customerManager [0]. Klons (nepatiesa) kā klients;

Visbeidzot, šeit ir pilns galvenās metodes kods jūsu atsaucei.

static void Main (virkne [] args)

      {

CustomerManager customerManager = jauns CustomerManager ();

Klienta custObj1 = jauns klients ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

Klienta custObj2 = jauns klients ();

custObj2.FirstName = "Stefans";

custObj2.LastName = "Smits";

customerManager [1] = custObj2;

Klienta klients = customerManager [0]. Klons (patiess) kā klients;

Console.ReadKey ();

      }

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