Programmēšana

Kā strādāt ar dekoratora dizaina rakstu C #

Dizaina modeļi ir risinājumi atkārtotām programmatūras projektēšanas problēmām un sarežģītībai, un tie tiek iedalīti trīs dažādās kategorijās: radošais, strukturālais un uzvedības.

Decorator dizaina modelis ir strukturāls raksts, un to var izmantot, lai objektam pievienotu funkcionalitāti, kas dinamiski norāda uz nepieciešamību modificēt objekta struktūru. Būtībā jūs varat izmantot dekoratora modeli, lai objektam dinamiski vai statiski pievienotu funkcionalitāti vai uzvedību, un tas nozīmē nepieciešamību mainīt objekta struktūru.

Ņemiet vērā, ka Decorator dizaina modelis atbilst atvērta slēgta principam, kas ir viens no SOLID principiem. Starp citu, Open Closed Princip tiek izmantots, lai izstrādātu klases, kas ir atvērtas paplašinājumiem, bet slēgtas modifikācijām. Atbilstība atvērtajam slēgtajam principam atvieglo tādu lietojumprogrammu izveidi, kuras var izmantot atkārtoti un kuras var viegli uzturēt. Četru banda (GOF) Dofactory paziņo: "Dinamiski pievienojiet objektam papildu pienākumus. Dekoratori funkcionalitātes paplašināšanai piedāvā elastīgu alternatīvu apakšklasei."

Mazliet koda

Šajā sadaļā mēs izpētīsim, kā mēs varam ieviest dekoratora dizaina modeli C #. Dekoratora dizaina modeļa tipiskas ieviešanas dalībnieki ir:

  1. Komponents - tas norāda faktiskā vai betona tipa bāzes tipu
  2. Betona komponents - tas ir betona tips, kas pagarina pamatkomponentu. Ņemiet vērā, ka šim tipam tiek pievienoti papildu pienākumi vai funkcijas.
  3. Dekorators - tā ir atsauce uz komponentu. Šim tipam tiek pievienotas dinamiskās funkcionalitātes.

Tagad ņemsim vērā šādu klasi.

publiskā abstraktā klase Darbinieks

   {

publiska abstrakta virkne Displejs ();

   }

Ņemiet vērā, ka, izmantojot Decorator dizaina modeli, jūs paplašināt esošās klases uzvedību, taču tas nenozīmē, ka jums ir jāizmanto abstrakti veidi - veidi var būt vai nebūt abstrakti. Jūs varat arī ieviest Decorator dizaina modeli, izmantojot saskarnes vai pat izmantojot metodes, kas ir virtuālas jūsu konkrētajās klasēs. Būtībā, īstenojot Decorator dizaina modeli, jūs neierobežojat izmantot tikai abstraktas klases. Mēs šeit izmantojam abstraktu klasi tikai vienkāršības labad.

EmployeeConcrete klase paplašina Employee klasi un tai pievieno papildu īpašības. Lūk, kā šī klase izskatītos.

   publiskā klase EmployeeConcrete: darbinieks

   {

public string FirstName {set; gūt; }

publiskā virkne LastName {set; gūt; }

publiskā virkne Adrese {set; gūt; }

publiski ignorēt virkni Displejs ()

       {

StringBuilder dati = new StringBuilder ();

data.Append ("Vārds:" + Vārds);

data.Append ("\ nPēdējais vārds:" + Uzvārds);

data.Append ("\ n Adrese:" + Adrese);

atgriešanas dati. ToString ();

       }

   }

Klase EmployeeDecorator paplašina nodarbināto klasi, pieņem komponentu klases instanci ar nosaukumu Darbinieks un ignorē metodi Display (). Lūk, kā šī klase izskatītos.

publiskā klase EmployeeDecorator: darbinieks

   {

Darbinieka darbinieks = null;

aizsargāts EmployeeDecorator (darbinieks)

       {

tas.darbinieks = darbinieks;

       }

publiski ignorēt virkni Displejs ()

       {

atgriezties darbinieks.Display ();

       }

   }

Tagad, kad komponentu, betona sastāvdaļu un dekoratoru klase ir gatava, jūs tagad varat paplašināt EmployeeDecorator klasi, lai izveidotu betona dekoratoru klasi. Šis kodu saraksts parāda, kā šī klase izskatītos.

publiskā klase Pastāvīgais darbinieks dekorētājs: darbinieks dekorators

   {

// Pievienojiet īpašumus, kas attiecas uz pastāvīgo darbinieku

privāts dubultā PF {get; komplekts; }

public PermanentEmployeeDecorator (darbinieka darbinieks): bāze (darbinieks)

       {   }

publiski ignorēt virkni Displejs ()

       {

atgriešanās bāze.Display () + "\ nDarbinieka tips: Pastāvīgs";

       }

   }

Un tas ir viss, kas jums jādara! Tagad varat izveidot PermanentEmployeeDecorator instanci un izmantot to, kā parādīts zemāk esošajā koda fragmentā.

static void Main (virkne [] args)

       {

EmployeeConcrete workerConcrete = jauns EmployeeConcrete

{Vārds = "Joydip", Uzvārds = "Kanjilal", Adrese = "Hyderabad, India"};

PermanentEmployeeDecorator workerDecorator = jauns PermanentEmployeeDecorator (darbinieksbetons);

Console.WriteLine (workerDecorator.Display ());

Konsole. Lasīt ();

       }

Jums var būt arī cita veida darbinieki - līgumdarbinieki. Lai to attēlotu, jums jāizveido vēl viena klase ar nosaukumu ContractEmployeeDecorator, kas paplašina EmployeeDecorator klasi. Skatiet tālāk sniegto koda fragmentu.

publiskā klase ContractEmployeeDecorator: EmployeeDecorator

   {

// Pievienojiet īpašumus, kas attiecas uz līguma darbinieku

privāta dubultā RatePerHour {get; komplekts; }

valsts līgumsDarbinieksDekorators (darbinieka darbinieks): bāze (darbinieks)

       { }

publiski ignorēt virkni Displejs ()

       {

atgriešanās bāze.Display () + "\ nDarbinieka tips: līgumiskais";

       }

   }

Šis koda fragments parāda, kā jūs varat izmantot klasi ContractEmployeeDecorator.

static void Main (virkne [] args)

       {

EmployeeConcrete workerConcrete = jauns EmployeeConcrete

{Vārds = "Joydip", Uzvārds = "Kanjilal", Adrese = "Hyderabad, India"};

ContractEmployeeDecorator workerDecorator = jauns ContractEmployeeDecorator (darbinieksbetons);

Console.WriteLine (workerDecorator.Display ());

Konsole. Lasīt ();

       }

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