Programmēšana

Novērotāja dizaina modeļa ieviešana C #

Novērotāja dizaina modelis ietilpst uzvedības dizaina modeļa kategorijā un tiek izmantots, ja vēlaties paziņot par izmaiņām vairākās klasēs. Uzvedības dizaina modeļi tiek izmantoti, lai risinātu objektu sadarbību un pienākumu deleģēšanu.

Būtībā novērotāja dizaina modelis tiek izmantots, lai noteiktu, kā saziņa starp lietojumprogrammas komponentiem mijiedarbojas savā starpā vai paziņo viens otram, nosūtot ziņojumus. Šajā modelī subjekts uztur novērotāju sarakstu un pēc tam paziņo šiem novērotājiem vai apgādājamiem par stāvokļa maiņu. Varat pievienot vai noņemt novērotājus arī izpildlaika laikā.

Piemērojamība

Kad jums vajadzētu izmantot šo dizaina modeli? Tā ir laba izvēle, ja vēlaties, lai tēma būtu jāievēro vienam vai vairākiem novērotājiem. Tas ir populārs dizaina modelis, kas palīdz jums ieviest izdevēja / abonenta scenāriju, kurā par izmaiņām objekta stāvoklī var paziņot visiem atkarīgajiem objektiem vai abonentiem (tipiskā izdevēja / abonenta scenārija realizācijā). Novērotāja dizaina modelī objekta stāvokļa izmaiņas tiek paziņotas citam objektam, norādot objektu nepieciešamību cieši savienot viens ar otru.

MVC (Model View Component) arhitektūras modelis ir klasisks Observer dizaina modeļa ieviešanas piemērs. MVC arhitektūras modeli izmanto, lai izveidotu brīvi savienotas, vieglāk pārbaudāmas un uzturamas lietojumprogrammas. Tipiskā MVC ieviešanā skats un modelis ir atdalīti viens no otra. Kamēr skats attēlo novērotāju, modelis attēlo jūsu novērojamo objektu.

Novērotāja dizaina modeļa ieviešana

Mums ir pietiekami daudz jēdzienu - tagad sapratīsim šo dizaina modeli ar ieviešanu. Pirmkārt, mums jāzina iesaistītās klases vai veidi.

  • Temats: To attēlo tips, ko izmanto, lai definētu saskarni viena vai vairāku novērotāju pievienošanai vai atdalīšanai
  • Priekšmets: To izmanto, lai paziņotu novērotājiem, ja notiek valsts maiņa
  • Novērotājs: Tas apzīmē veidu, par kuru jāinformē, ja notiek izmaiņas
  • Betona novērotājs: Tas atspoguļo novērotāja veida konkrētu īstenošanu

Novērotāja dizaina modeļa tipiskā ieviešanā, iespējams, vēlēsities, lai būtu Tēmas un Novērotāja tips. Šeit ir koda fragments, kas to ilustrē.

publiskā abstraktā klase Priekšmets

    {

aizsargāts saraksts lstObservers = jauns saraksts ();

aizsargāts tukšums reģistrs (novērotājs novērotājs)

        {

lstObservers.Add (novērotājs);

        }

aizsargāts anulēt UnRegister (novērotāja novērotājs)

        {

lstObservers.Noņemt (novērotājs);

        }

aizsargāts anulēt UnRegisterAll ()

        {

foreach (novērotājs novērotājs lstObservers)

            {

lstObservers.Noņemt (novērotājs);

            }

        }

public abstract anulēt Paziņot ();

    }

publiskā abstraktā klase Novērotājs

    {

publiski abstrakts spēkā neesošs atjauninājums ();

    }

Tagad skatiet iepriekš sniegto koda fragmentu. Klase Temats satur novērotāju eksemplāru sarakstu un dažas metodes abonentu pievienošanai vai noņemšanai, t.i., novērotāju klases eksemplārus. Ņemiet vērā, ka paziņošanas metode ir pasludināta par abstraktu - klasei, kas paplašinātu mācību priekšmeta klasi, ir jānodrošina atbilstoša šīs metodes ieviešana. Novērotāju klasē ir tikai viena metode - atjaunināšanas metode. Esmu padarījis šo ieviešanu pēc iespējas vienkāršāku.

BlogPost klase paplašina priekšmetu klasi un ievieš paziņošanas metodi, kas klasē Temats ir pasludināta par abstraktu.

publiskā klase BlogPost: Subject

    {

public void Attach (novērotājs novērotājs)

        {

// Jūs varat uzrakstīt savu ieviešanu šeit vai izsaukt bāzes versiju

bāze.Reģistrēties (novērotājs);

        }

public void Atdalīt (novērotājs novērotājs)

        {

// Jūs varat uzrakstīt savu ieviešanu šeit vai izsaukt bāzes versiju

bāze.Nereģistrēties (novērotājs);

        }

public void DetachAll ()

        {

// Jūs varat uzrakstīt savu ieviešanu šeit vai izsaukt bāzes versiju

bāze.UnRegisterAll ();

        }

publiska ignorēšana spēkā neesoša Paziņot ()

        {

foreach (novērotājs novērotājs lstObservers)

            {

novērotājs. Atjaunināt ();

            }

        }

    }

ConcreteObserver klase ir dota zemāk. Atstāju lasītājiem rakstīt savu kodu atjaunināšanas metodē, lai nosūtītu e-pastu ar paziņojumu, ka raksts ir izlikts, utt.

sabiedrības klase ConcreteObserver: Novērotājs

    {

public string e-pasts

        {

gūt; komplekts;

        }

public override void Update ()

        {

Console.WriteLine ("Atjaunināšanas metodes iekšpusē ...");

        }

    }

No šīs saites varat uzzināt vairāk par Observer dizaina modeli.

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