Ohjelmointi

Kuinka työskennellä C #: n sisustajan suunnittelukuvion kanssa

Suunnittelumallit ovat ratkaisuja toistuviin ongelmiin ja monimutkaisuuteen ohjelmistosuunnittelussa, ja ne on jaettu kolmeen erilliseen luokkaan: luova, rakenteellinen ja käyttäytymismalli.

Decorator-suunnittelukuvio on rakennekuvio, jota voidaan käyttää lisäämällä esineeseen toiminnallisuutta, mikä ilmaisee tarpeen muuttaa objektin rakennetta. Pohjimmiltaan voit käyttää Decorator-mallia toiminnallisuuden tai käyttäytymisen liittämiseen objektiin dynaamisesti tai staattisesti, mikä tarkoittaa tarvetta muuttaa objektin rakennetta.

Huomaa, että Decorator-suunnittelumalli noudattaa avointa suljettua periaatetta, joka on yksi SOLID-periaatteista. Muuten, avointa suljettua periaatetta käytetään sellaisten luokkien suunnitteluun, jotka ovat avoimia laajennuksille, mutta suljetut muutosten vuoksi. Avoimen suljetun periaatteen noudattaminen helpottaa uudelleenkäytettävien ja helposti ylläpidettävien sovellusten rakentamista. Dofactoryn neljän ryhmän (GOF) mukaan: "Liitä objektiin lisävastuuta dynaamisesti. Sisustajat tarjoavat joustavan vaihtoehdon alakategorialle toiminnallisuuden laajentamiseksi."

Hieman koodia

Tässä osassa tutkitaan, miten voimme toteuttaa Decorator-suunnittelukuvion C #: ssa. Decorator-mallin tyypillisen toteutuksen osallistujat ovat:

  1. Komponentti - tämä edustaa todellisen tai betonityypin perustyyppiä
  2. Betonikomponentti - tämä edustaa betonityyppiä, joka jatkaa pohjaosaa. Huomaa, että lisätyypit tai toiminnot lisätään tähän tyyppiin.
  3. Sisustaja - tämä viittaa komponenttiin. Dynaamiset toiminnot lisätään tähän tyyppiin.

Tarkastellaan nyt seuraavaa luokkaa.

julkinen abstrakti luokka Työntekijä

   {

julkinen abstrakti merkkijono Display ();

   }

Huomaa, että kun käytät Decorator-suunnittelumallia, laajennat olemassa olevan luokan käyttäytymistä, mutta se ei välttämättä tarkoita, että sinun on käytettävä abstrakteja tyyppejä - tyypit voivat olla abstrakteja tai eivät. Voit myös toteuttaa Decorator-suunnittelumallin käyttöliittymien avulla tai jopa käyttämällä menetelmiä, jotka ovat virtuaalisia konkreettisissa luokissasi. Pohjimmiltaan et ole pakko käyttää vain abstrakteja luokkia, kun toteutat Decorator-suunnittelukuvion. Käytämme tässä abstraktia luokkaa vain yksinkertaisuuden vuoksi.

EmployeeConcrete-luokka laajentaa Employee-luokkaa ja lisää siihen lisäominaisuuksia. Näin tämä luokka näyttäisi.

   julkinen luokka EmployeeConcrete: työntekijä

   {

public string Etunimi {set; saada; }

public string LastName {set; saada; }

public string Osoite {set; saada; }

julkinen ohitus merkkijono Näyttö ()

       {

StringBuilder-tiedot = new StringBuilder ();

data.Append ("Etunimi:" + Etunimi);

data.Append ("\ nSukunimi:" + Sukunimi);

data.Append ("\ nOsoite:" + osoite);

palautustiedot.ToString ();

       }

   }

EmployeeDecorator-luokka laajentaa työntekijä-luokkaa, hyväksyy komponenttiluokan esiintymän nimeltä Työntekijä ja ohittaa Display () -menetelmän. Näin tämä luokka näyttäisi.

julkisen luokan EmployeeDecorator: työntekijä

   {

Työntekijä = null;

suojattu EmployeeDecorator (työntekijä)

       {

tämä. työntekijä = työntekijä;

       }

julkinen ohitus merkkijono Näyttö ()

       {

paluun työntekijä.näyttö ();

       }

   }

Nyt kun komponentti-, betonikomponentti- ja sisustusluokka on valmis, voit nyt laajentaa EmployeeDecorator-luokkaa luomaan betonikoristeluokan. Seuraava koodiluettelo näyttää miltä tämä luokka näyttää.

public class PysyväEmployeeDecorator: EmployeeDecorator

   {

// Lisää vakituiselle työntekijälle olennaisia ​​ominaisuuksia

yksityinen kaksinkertainen PF {get; aseta; }

public PermanentEmployeeDecorator (työntekijän työntekijä): pohja (työntekijä)

       {   }

julkinen ohitus merkkijono Näyttö ()

       {

return base.Display () + "\ nTyöntekijätyyppi: Pysyvä";

       }

   }

Ja se on kaikki mitä sinun tarvitsee tehdä! Voit nyt luoda PermanentEmployeeDecorator-ilmentymän ja käyttää sitä alla olevan koodinpätkän mukaisesti.

staattinen void Main (merkkijono [] args)

       {

EmployeeConcrete workerConcrete = uusi EmployeeConcrete

{Etunimi = "Joydip", Sukunimi = "Kanjilal", Osoite = "Hyderabad, Intia"};

PermanentEmployeeDecorator workerDecorator = uusi PysyväEmployeeDecorator (työntekijäbetoni);

Console.WriteLine (workerDecorator.Display ());

Konsoli.Lue ();

       }

Sinulla voi olla myös toisen tyyppinen työntekijä - sopimussuhteinen työntekijä. Sen edustamiseksi sinun on luotava toinen luokka nimeltä ContractEmployeeDecorator, joka laajentaa EmployeeDecorator-luokkaa. Katso alla oleva koodinpätkä.

public class ContractEmployeeDecorator: EmployeeDecorator

   {

// Lisää sopimussuhteiselle työntekijälle olennaisia ​​ominaisuuksia

yksityinen kaksinkertainen RatePerHour {get; aseta; }

julkinen sopimusEmployeeDecorator (työntekijän työntekijä): pohja (työntekijä)

       { }

julkinen ohitus merkkijono Näyttö ()

       {

return base.Display () + "\ nTyöntekijätyyppi: Sopimussuhde";

       }

   }

Seuraava koodinpätkä kuvaa, kuinka voit käyttää ContractEmployeeDecorator-luokkaa.

staattinen void Main (merkkijono [] args)

       {

EmployeeConcrete workerConcrete = uusi EmployeeConcrete

{Etunimi = "Joydip", Sukunimi = "Kanjilal", Osoite = "Hyderabad, Intia"};

ContractEmployeeDecorator workerDecorator = uusi ContractEmployeeDecorator (työntekijäbetoni);

Console.WriteLine (workerDecorator.Display ());

Konsoli.Lue ();

       }

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