Ohjelmointi

Kuinka käyttää prototyyppisuunnittelukuviota .NET: ssä

Suunnittelumalleja käytetään toistuvien ongelmien ja monimutkaisuuksien ratkaisemiseen ohjelmistokehityksessä. Prototyyppikuvio kuuluu luovan suunnittelumallin luokkaan ja sitä käytetään objektin kloonin luomiseen. Luovat suunnittelumallit koskevat objektin luomista ja objektin luontiprosessin hallintaa sovelluksessasi. Tyypillisiä esimerkkejä suunnittelumalleista, jotka kuuluvat luovan mallin luokkaan, ovat abstraktit tehdas-, rakennus-, tehdas-, prototyyppi- ja yksittäiskuviot.

Prototyyppisuunnittelumallin avulla voit luoda uuden luokan ilmentymän olemassa olevasta ilmentymästä. Voit hyödyntää tätä suunnittelumallia luodaksesi objektista kloonin, kun itse objektin luontiprosessi on kallis asia. Huomaa, että kloonaus määritellään objektin tarkan kopion luomisprosessiksi. Kloonausta on kahta tyyppiä: syvä kopio ja matala kopio.

Matala kopio vs. syvä kopio kloonaus

Matala kopiointi suoritetaan Object.MemberwiseClone-menetelmällä ja kopioi objektin ei-staattiset kentät, kun taas syväkopiointia käytetään sekä viite- että arvotyyppien kopiointiin ja antaa sinulle erillisen esiintymän objektissa. Voit oppia lisää syvää ja matalaa kopiota artikkelistani täältä.

Prototyyppimallin tyypillisen toteutuksen osallistujat (luokat ja objektit) ovat seuraavat:

  • Prototyyppi - tämä määrittelee käyttöliittymän itsensä kloonaamiseksi
  • ConcretePrototype - tämä määrittää tyypin, joka toteuttaa operaation itse kloonaamiseksi
  • Asiakas - tämä määrittelee kuluttajan, joka voi luoda uuden esiintymän kloonaamalla prototyypin

Ottaen tämän huomioon otamme prototyyppikuvion käyttöön tässä kolmella tyypillä. Näitä ovat seuraavat:

  • Asiakas
  • CustomerManager
  • Asiakkaan prototyyppi

Luo abstrakti prototyyppi .NET-luokassa

Katso alla olevaa CustomerPrototype-luokkaa.

[Sarjattavissa ()]

julkinen abstrakti luokka CustomerPrototype

    {

julkinen tiivistelmä CustomerPrototype Clone (bool performDeepCopy);

    }

CustomerPrototype-luokka on luonteeltaan abstrakti ja sisältää yhden abstraktin menetelmän nimeltä Klooni. Tämä menetelmä hyväksyy loogisen parametrin nimeltä performDeepCopy. Jos sille välitetty parametri on totta, se suorittaa syvän kopion, matala kopio muuten.

Luo konkreettinen prototyyppiluokka .NET-verkkoon

Seuraavaksi annetaan CustomerManager-luokka. Se sisältää sanakirjan, joka tallentaa asiakasluokan (se on vain yksi POCO-luokka) esiintymät sen sisälle. Se sisältää myös indeksoijan nimeltä CustomerPrototype. Indeksoijan asetettua ominaisuutta käytetään tietojen tallentamiseen Sanakirja-ilmentymän asiakkaille.

  julkisen luokan CustomerManager

    {

yksityisen sanakirjan asiakkaat = uusi sanakirja ();

julkinen asiakas prototyyppitä tämä [int-hakemisto]

        {

hanki {paluuasiakkaita [hakemisto]; }

aseta {customers.Add (indeksi, arvo); }

        }

    }

Luo .NET-prototyyppiasiakassarja

Seuraavaksi annetaan asiakasluokka. Se sisältää kaksi ominaisuutta, etunimi ja sukunimi, sekä kaksi menetelmää, klooni ja DeepCopy.

[Sarjattavissa ()]

julkisen luokan asiakas: CustomerPrototype

    {

julkinen merkkijono Etunimi

        {

Valmistaudu;

        }

julkinen merkkijono Sukunimi

        {

saada; aseta;

        }

public override CustomerPrototype Clone (bool deepClone)

        {

kytkin (deepClone)

            {

tapaus totta:

palauta tämä.DeepCopy (tämä) nimellä CustomerPrototype;

tapaus väärä:

palauta tämä.MemberwiseClone () CustomerPrototype;

oletus:

palauta tämä.MemberwiseClone () CustomerPrototype;

            }

        }

yksityinen T DeepCopy (T obj)

        {

// Kirjoita koodi tähän suorittaaksesi kopio.

        }

     }

Olen ohittanut DeepCopy-menetelmän lähdekoodin yllä olevasta koodiluettelosta, koska se on jo saatavilla aikaisemmassa artikkelissani täällä.

Luo syvä kopio objektista .NET-tiedostossa

Seuraava koodinpätkä kuvaa, kuinka voit hyödyntää aiemmin luomamme CustomerManager-luokan hyödyntämällä syväkopiointia.

CustomerManager customerManager = uusi CustomerManager ();

Asiakkaan custObj1 = uusi asiakas ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

Asiakkaan custObj2 = uusi asiakas ();

custObj2.FirstName = "Stephen";

custObj2.LastName = "Smith";

customerManager [1] = custObj2;

Asiakasasiakas = asiakasManager [0]. Klooni (true) asiakkaana;

Huomaa, että olemme välittäneet "true" parametrina Clone-menetelmälle syvällisen kopion suorittamiseksi.

Luo matala kopio objektista .NET-verkkoon

Vastaavasti voit välittää ”false” parametrina samalle menetelmälle matalan kopion suorittamiseksi. Näin voit saavuttaa tämän.

Asiakasasiakas = asiakasManager [0]. Klooni (väärä) asiakkaana;

Lopuksi tässä on päämenetelmän täydellinen koodi viitteellesi.

staattinen void Main (merkkijono [] args)

      {

CustomerManager customerManager = uusi CustomerManager ();

Asiakkaan custObj1 = uusi asiakas ();

custObj1.FirstName = "Joydip";

custObj1.LastName = "Kanjilal";

customerManager [0] = custObj1;

Asiakkaan custObj2 = uusi asiakas ();

custObj2.FirstName = "Stephen";

custObj2.LastName = "Smith";

customerManager [1] = custObj2;

Asiakasasiakas = asiakasManager [0]. Klooni (true) asiakkaana;

Console.ReadKey ();

      }