Programmering

Sådan bruges prototype design mønster i .NET

Designmønstre bruges til at løse tilbagevendende problemer og kompleksitet i softwareudvikling. Prototypemønsteret tilhører kategorien for skabelsesmønstre og bruges til at skabe en klon af et objekt. Oprettelsesdesignmønstre beskæftiger sig med oprettelse af objekter og styring af objektoprettelsesprocessen i din applikation. Typiske eksempler på designmønstre, der falder ind under kategorien skabelsesmønstre, inkluderer den abstrakte fabrik, builder, fabriksmetode, prototype og singleton-mønstre.

Prototype designmønsteret giver dig mulighed for at oprette en ny forekomst af en klasse fra en eksisterende forekomst. Du kan drage fordel af dette designmønster til at oprette en klon af et objekt, når selve objektoprettelsesprocessen er en dyr affære. Bemærk, at kloning er defineret som processen til oprettelse af en nøjagtig kopi af et objekt. Der er to typer kloning: dyb kopi og lav kopi.

Lav kopi kontra dyb kopi kloning

Lav kopi udføres ved hjælp af Object.MemberwiseClone-metoden og kopierer de ikke-statiske felter på et objekt, mens dyb kopi bruges til at kopiere både reference- og værdityperne og giver dig en tydelig forekomst på et objekt. Du kan lære mere dyb kopi og lav kopi fra min artikel her.

Deltagerne (klasser og objekter) i en typisk implementering af prototypemønsteret inkluderer følgende:

  • Prototype - dette definerer en grænseflade til kloning af sig selv
  • ConcretePrototype - dette definerer en type, der implementerer handlingen til kloning af sig selv
  • Klient - dette definerer den forbruger, der kan oprette en ny instans ved at klone en prototype

Med dette i tankerne implementerer vi prototypemønsteret her ved hjælp af tre typer. Disse inkluderer følgende:

  • Kunde
  • CustomerManager
  • Kundeprototype

Opret en prototype abstrakt klasse i .NET

Se klassen CustomerPrototype angivet nedenfor.

[Serialiserbar ()]

offentlig abstrakt klasse CustomerPrototype

    {

offentlig abstrakt CustomerPrototype Clone (bool performDeepCopy);

    }

Klassen CustomerPrototype er abstrakt og indeholder en abstrakt metode ved navn Clone. Denne metode accepterer en boolesk parameter med navnet performDeepCopy. Hvis parameteren, der sendes til den, er sand, udfører den en dyb kopi, ellers lav kopi.

Opret en konkret prototypeklasse i .NET

CustomerManager-klassen gives derefter. Den indeholder en ordbog, der gemmer forekomsterne af kundeklassen (det er bare en anden POCO-klasse) inde i den. Den indeholder også en indeksator med navnet CustomerPrototype. Indekseringssætets indstillede egenskab bruges til at gemme data i ordbogen, der hedder kunder.

  offentlig klasse CustomerManager

    {

private ordbogskunder = ny ordbog ();

offentlig kundePrototype dette [int-indeks]

        {

få {retur kunder [indeks]; }

sæt {kunder.Add (indeks, værdi); }

        }

    }

Opret en prototype klientklasse i .NET

Kundeklassen gives derefter. Den indeholder to egenskaber, nemlig FirstName og LastName, og to metoder, Clone og DeepCopy.

[Serialiserbar ()]

offentlig klasse kunde: CustomerPrototype

    {

offentlig streng Fornavn

        {

få; sæt;

        }

offentlig streng Efternavn

        {

få; sæt;

        }

offentlig tilsidesættelse af CustomerPrototype Clone (bool deepClone)

        {

switch (deepClone)

            {

tilfældet er sandt:

returner dette.DeepCopy (dette) som CustomerPrototype;

sag falsk:

returner this.MemberwiseClone () som CustomerPrototype;

Standard:

returner dette.MemberwiseClone () som CustomerPrototype;

            }

        }

privat T DeepCopy (T obj)

        {

// Skriv kode her for at udføre dyb kopi.

        }

     }

Jeg har sprunget over kildekoden til DeepCopy-metoden i ovenstående kodeliste, da den allerede er tilgængelig i min tidligere artikel her.

Opret en dyb kopi af et objekt i .NET

Følgende kodestykke illustrerer, hvordan du kan drage fordel af CustomerManager-klassen, vi oprettede tidligere, til at udføre en dyb kopi.

CustomerManager customerManager = ny CustomerManager ();

KundecustObj1 = ny kunde ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

KundecustObj2 = ny kunde ();

custObj2.FirstName = "Stephen";

custObj2.LastName = "Smith";

customerManager [1] = custObj2;

Kundekunde = customerManager [0] .Clone (true) som kunde;

Bemærk, at vi har videregivet "sand" som parameter til klonmetoden for at udføre en dyb kopi.

Opret en lav kopi af et objekt i .NET

På samme måde kan du sende "falsk" som parameter til den samme metode for at udføre en lav kopi. Sådan kan du opnå dette.

Kundekunde = customerManager [0] .Clone (false) som kunde;

Endelig er her den komplette kode for Main-metoden til din reference.

statisk ugyldigt Main (streng [] args)

      {

CustomerManager customerManager = ny CustomerManager ();

KundecustObj1 = ny kunde ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

KundecustObj2 = ny kunde ();

custObj2.FirstName = "Stephen";

custObj2.LastName = "Smith";

customerManager [1] = custObj2;

Kundekunde = customerManager [0] .Clone (true) som kunde;

Console.ReadKey ();

      }