Programiranje

Izvajanje vzorca Observer design v C #

Vzorec oblikovanja Observer spada pod kategorijo vzorca vedenjskega oblikovanja in se uporablja, kadar želite obvestiti o spremembi številnih razredov. Vzorčni vzorci oblikovanja so tisti, ki se uporabljajo za reševanje sodelovanja objektov in prenosa odgovornosti.

V bistvu se vzorec načrtovanja Observer uporablja za določanje, kako komunikacija med komponentami v aplikaciji medsebojno deluje ali se medsebojno obvešča s pošiljanjem sporočil. V tem vzorcu subjekt vzdržuje seznam opazovalcev in nato o tem obvesti opazovalce ali vzdrževane osebe, ko in kdaj pride do spremembe stanja. Opazovalce lahko dodate ali odstranite tudi med izvajanjem.

Uporabnost

Kdaj naj uporabite ta vzorec oblikovanja? Dobra izbira je, če bi radi imeli predmet, ki bi ga moral opazovati eden ali več opazovalcev. To je priljubljen vzorec načrtovanja, ki vam pomaga pri izvedbi scenarija založnik / naročnik, v katerem je mogoče spremembe stanja objekta obvestiti o vseh odvisnih predmetih ali naročnikih (v tipični izvedbi založnika / naročnika). V vzorcu Observer se spremembe stanja predmeta sporočajo drugemu objektu, razen če so predmeti tesno povezani med seboj.

Arhitekturni vzorec MVC (Model View Component) je klasičen primer izvedbe vzorčnega vzorca Observer. Arhitekturni vzorec MVC se uporablja za izdelavo aplikacij, ki so ohlapno povezane, enostavnejše za preizkušanje in vzdrževanje. V tipični izvedbi MVC sta pogled in model ločena drug od drugega. Medtem ko Pogled predstavlja Observerja, Model predstavlja vaš Observable objekt.

Izvajanje vzorca oblikovanja Observer

Konceptov imamo dovolj - zdaj razumemo ta oblikovalski vzorec z izvedbo. Najprej moramo poznati sodelujoče razrede ali tipe.

  • Zadeva: To predstavlja vrsta, ki se uporablja za določitev vmesnika za pritrditev ali ločitev enega ali več opazovalcev
  • Beton Predmet: To se uporablja za obveščanje opazovalcev o spremembi stanja
  • Opazovalec: To predstavlja tip, ki ga je treba obvestiti v primeru spremembe
  • ConcreteObserver: To predstavlja konkretno izvedbo tipa opazovalca

V tipični izvedbi vzorca oblikovanja Observer boste morda želeli imeti vrsto Predmet in Observer. Tu je prikazan delček kode, ki to ponazarja.

javni abstraktni razred Predmet

    {

zaščiten seznam lstObservers = nov seznam ();

zaščitena void Register (opazovalec opazovalec)

        {

lstObservers.Add (opazovalec);

        }

zaščitena praznina UnRegister (opazovalec opazovalec)

        {

lstObservers.Remove (opazovalec);

        }

zaščitena praznina UnRegisterAll ()

        {

foreach (opazovalec opazovalec v lstObservers)

            {

lstObservers.Remove (opazovalec);

            }

        }

javni povzetek void Notify ();

    }

javni abstraktni razred Opazovalec

    {

javni povzetek void Update ();

    }

Zdaj glejte zgoraj navedeni delček kode. Razred Subject vsebuje seznam primerkov Observer in nekaj metod za dodajanje ali odstranjevanje naročnikov, tj. Primerke razreda Observer. Upoštevajte, da je bila metoda Notify razglašena za abstraktno - razred, ki bi razširil razred Subject, mora zagotoviti ustrezno izvedbo te metode. Razred Observer vsebuje samo eno metodo - metodo Update. To izvedbo sem poenostavil čim bolj enostavno.

Razred BlogPost razširja razred Subject in izvaja metodo Notify, ki je bila v razredu Subject razglašena za abstraktno.

javni razred BlogPost: Zadeva

    {

javna praznina Attach (opazovalec opazovalec)

        {

// Tu lahko napišete svojo izvedbo ali pokličete osnovno različico

base.Register (opazovalec);

        }

odprtje javne praznine (opazovalec opazovalca)

        {

// Tu lahko napišete svojo izvedbo ali pokličete osnovno različico

base.UnRegister (opazovalec);

        }

javna praznina DetachAll ()

        {

// Tu lahko napišete svojo izvedbo ali pokličete osnovno različico

base.UnRegisterAll ();

        }

javna razveljavitev nična Obvesti ()

        {

foreach (opazovalec opazovalec v lstObservers)

            {

observer.Update ();

            }

        }

    }

Razred ConcreteObserver je podan spodaj. Bralcem prepuščam, da v način posodabljanja napišejo svojo kodo in pošljejo e-poštno sporočilo, da je članek objavljen ali itd.

javni razred ConcreteObserver: Opazovalec

    {

javni niz Email

        {

dobili; set;

        }

javna razveljavitev void Update ()

        {

Console.WriteLine ("Znotraj metode posodabljanja ...");

        }

    }

Več o vzorcu Observer design lahko izveste na tej povezavi.

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