Programavimas

Kaip naudoti .NET prototipo modelį

Dizaino modeliai naudojami pasikartojančioms programinės įrangos kūrimo problemoms spręsti. Šablono prototipas priklauso kūrybinių dizaino modelių kategorijai ir yra naudojamas objekto klonui sukurti. Kūrybiniai dizaino modeliai yra susiję su objekto kūrimu ir objekto kūrimo proceso valdymu jūsų programoje. Tipiški dizaino modelių, kurie patenka į kūrybinių modelių kategoriją, pavyzdžiai yra abstraktūs gamyklos, statybininko, gamyklos metodo, prototipo ir pavienių modelių pavyzdžiai.

Prototipo dizaino modelis leidžia jums sukurti naują klasės egzempliorių iš esamo egzemplioriaus. Galite pasinaudoti šiuo dizaino modeliu, kad sukurtumėte objekto kloną, kai pats objekto kūrimo procesas yra brangus reikalas. Atkreipkite dėmesį, kad klonavimas apibrėžiamas kaip tikslios objekto kopijos kūrimo procesas. Yra du klonavimo tipai: gilioji ir seklioji.

Seklios kopijos ir giliosios kopijos klonavimas

Sekli kopija atliekama naudojant „Object.MemberwiseClone“ metodą ir nukopijuoja ne statinius objekto laukus, o gilioji kopija naudojama nukopijuojant ir nuorodos, ir reikšmės tipus ir suteikia jums aiškų objekto egzempliorių. Čia galite sužinoti daugiau išsamios ir negilios kopijos iš mano straipsnio.

Dalyviai (klasės ir objektai), tipiškai įgyvendindami prototipo modelį, yra šie:

  • Prototipas - tai apibrėžia sąsają pačiam klonavimui
  • „ConcretePrototype“ - tai apibrėžia tipą, kuris vykdo pačios klonavimo operaciją
  • Klientas - tai apibrėžia vartotoją, kuris gali sukurti naują egzempliorių klonuodamas prototipą

Turėdami tai omenyje, čia įdiegsime prototipo modelį naudodami tris tipus. Tai apima:

  • Klientas
  • „CustomerManager“
  • „CustomerPrototype“

Sukurkite .NET abstrakčios klasės prototipą

Žr. Toliau pateiktą „CustomerPrototype“ klasę.

[Serializuojamas ()]

viešoji abstrakčioji klasė „CustomerPrototype“

    {

viešas abstraktus „ClientPrototype Clone“ („Bool performDeepCopy“);

    }

„ClientPrototype“ klasė yra abstraktaus pobūdžio ir apima vieną abstraktų metodą, pavadintą „Klonas“. Šis metodas priima loginį parametrą, pavadintą „performDeepCopy“. Jei jam perduotas parametras yra teisingas, jis atliks gilią kopiją, kitaip - negiliai.

Sukurkite konkrečią prototipų klasę .NET

Toliau pateikiama „ClientManager“ klasė. Jame yra žodynas, kuriame saugomi klientų klasės (tai tik dar viena POCO klasė) egzemplioriai. Jame taip pat yra indeksuotojas, pavadintas „CustomerPrototype“. Nustatyta indeksuotojo ypatybė naudojama duomenims kaupti žodyno egzemplioriuose, pavadintuose klientuose.

  viešosios klasės „CustomerManager“

    {

privataus žodyno klientai = naujas žodynas ();

public CustomerPrototipuokite šį [int indeksą]

        {

gauti {grįžtančius klientus [rodyklė]; }

nustatyti {klientus.Pridėti (indeksas, vertė); }

        }

    }

Sukurkite kliento prototipo klasę .NET

Toliau pateikiama klientų klasė. Jame yra dvi savybės, būtent Vardas ir Pavardė, ir du metodai - Klonas ir „DeepCopy“.

[Serializuojamas ()]

viešosios klasės klientas: „CustomerPrototype“

    {

vieša eilutė Vardas

        {

pasiruošti;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

public override „CustomerPrototype Clone“ („Bool deepClone“)

        {

jungiklis („deepClone“)

            {

tiesa:

grąžinkite tai.DeepCopy (this) kaip CustomerPrototype;

neteisingas atvejis:

grąžinkite tai.MemberwiseClone () kaip „CustomerPrototype“;

numatytas:

grąžinkite tai. „MemberwiseClone“ () kaip „CustomerPrototype“;

            }

        }

privati ​​„T DeepCopy“ (T obj)

        {

// Parašykite kodą čia, kad atliktumėte išsamią kopiją.

        }

     }

Pirmiau pateiktame kodų sąraše praleidau „DeepCopy“ metodo šaltinio kodą, nes jis jau yra mano ankstesniame straipsnyje.

Sukurkite gilią objekto kopiją .NET

Šis kodo fragmentas parodo, kaip galite pasinaudoti anksčiau sukurta „CustomerManager“ klase, kad atliktumėte gilią kopiją.

CustomerManager customerManager = naujas CustomerManager ();

Kliento custObj1 = naujas klientas ();

custObj1.FirstName = "Joydipas";

custObj1.LastName = "Kanjilal";

kliento valdytojas [0] = custObj1;

Kliento custObj2 = naujas klientas ();

custObj2.FirstName = "Steponas";

custObj2.LastName = "Smithas";

kliento valdytojas [1] = custObj2;

Kliento klientas = customerManager [0]. Klonas (tiesa) kaip Klientas;

Atkreipkite dėmesį, kad mes perdavėme „true“ kaip „Clone“ metodo parametrą, kad atliktume gilią kopiją.

Sukurkite negilų objekto kopiją .NET

Panašiai galite perduoti „false“ kaip parametrą tam pačiam metodui, kad atliktumėte seklią kopiją. Štai kaip galite tai pasiekti.

Kliento klientas = customerManager [0]. Klonas (klaidingas) kaip Klientas;

Galiausiai, čia yra visas jūsų pagrindinio metodo kodas.

static void Main (string [] args)

      {

CustomerManager customerManager = naujas CustomerManager ();

Kliento custObj1 = naujas klientas ();

custObj1.FirstName = "Joydipas";

custObj1.LastName = "Kanjilal";

kliento valdytojas [0] = custObj1;

Kliento custObj2 = naujas klientas ();

custObj2.FirstName = "Steponas";

custObj2.LastName = "Smithas";

kliento valdytojas [1] = custObj2;

Kliento klientas = customerManager [0]. Klonas (tiesa) kaip klientas;

Pultas.ReadKey ();

      }

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