Programovanie

Implementácia návrhového vzoru Observer v C #

Dizajnový vzor Observer spadá do kategórie Behaviorálny návrhový vzor a používa sa, ak chcete oznámiť zmenu viacerým triedam. Návrhové vzory správania sú tie, ktoré sa používajú na riešenie spolupráce na objektoch a delegovania zodpovednosti.

Dizajnový vzor Observer sa v zásade používa na definovanie toho, ako komunikácia medzi komponentmi v aplikácii vzájomne interaguje alebo sa navzájom upozorňuje zasielaním správ. Podľa tohto vzoru subjekt udržuje zoznam pozorovateľov a potom upozorní týchto pozorovateľov alebo závislé osoby, keď dôjde k zmene stavu. Môžete tiež pridať alebo odobrať pozorovateľov za behu.

Uplatniteľnosť

Kedy by ste mali použiť tento dizajnový vzor? Je to dobrá voľba, keď chcete mať predmet, ktorý musí pozorovať jeden alebo viac pozorovateľov. Je to populárny vzor návrhu, ktorý vám pomôže implementovať scenár vydavateľ / predplatiteľ, v ktorom je možné zmeny stavu objektu oznamovať všetkým závislým objektom alebo predplatiteľom (v typickej implementácii scenára vydavateľ / predplatiteľ). V návrhovom vzore Observer sú zmeny stavu objektu komunikované s iným objektom bez potreby toho, aby boli objekty navzájom pevne spojené.

Architektonický vzor MVC (Model View Component) je klasickým príkladom implementácie návrhového vzoru Observer. Architektonický vzor MVC sa používa na vytváranie aplikácií, ktoré sú voľne spojené, ľahšie sa testujú a udržiavajú. V typickej implementácii MVC sú pohľad a model navzájom oddelené. Zatiaľ čo Pohľad predstavuje Pozorovateľa, Model predstavuje váš Pozorovateľný objekt.

Implementácia návrhového vzoru Observer

Konceptov máme dosť - poďme teraz pochopiť tento návrhový vzor s implementáciou. Najprv musíme poznať zúčastnené triedy alebo typy.

  • Predmet: Toto predstavuje typ, ktorý sa používa na definovanie rozhrania na pripojenie alebo odpojenie jedného alebo viacerých pozorovateľov
  • Betónový predmet: Používa sa na upozornenie pozorovateľov, keď dôjde k zmene stavu
  • Pozorovateľ: Toto predstavuje typ, ktorý by sa mal upozorniť v prípade zmeny
  • ConcreteObserver: To predstavuje konkrétnu implementáciu typu pozorovateľa

V typickej implementácii návrhového vzoru Observer možno budete chcieť mať typ Subject a Observer. Toto je útržok kódu, ktorý to ilustruje.

verejná abstraktná trieda Predmet

    {

chránený zoznam lstObservers = nový Zoznam ();

chránený neplatný register (Observer observer)

        {

lstObservers.Add (pozorovateľ);

        }

protected void UnRegister (Observer observer)

        {

lstObservers.Remove (pozorovateľ);

        }

Protected Void UnRegisterAll ()

        {

foreach (Pozorovateľ pozorovateľ v lstObservers)

            {

lstObservers.Remove (pozorovateľ);

            }

        }

public abstract void Notify ();

    }

verejný abstraktný pozorovateľ

    {

public abstract void Update ();

    }

Teraz si pozrite fragment kódu uvedený vyššie. Trieda Predmet obsahuje zoznam inštancií Observer a niekoľko metód na pridanie alebo odstránenie predplatiteľov, t. J. Inštancie triedy Observer. Upozorňujeme, že metóda Notify bola vyhlásená za abstraktnú - trieda, ktorá by rozšírila triedu Subject, musí pre túto metódu zabezpečiť príslušnú implementáciu. Trieda Observer obsahuje iba jednu metódu - metódu Update. Túto implementáciu som zjednodušil čo najjednoduchšie.

Trieda BlogPost rozširuje triedu Predmet a implementuje metódu Oznámenie, ktorá bola v triede Predmet deklarovaná ako abstraktná.

public class BlogPost: Predmet

    {

public void Attach (Pozorovateľ pozorovateľ)

        {

// Tu môžete napísať svoju vlastnú implementáciu alebo zavolať základnú verziu

základňa.Register (pozorovateľ);

        }

public void Detach (Pozorovateľ pozorovateľ)

        {

// Tu môžete napísať svoju vlastnú implementáciu alebo zavolať základnú verziu

base.UnRegister (pozorovateľ);

        }

public void DetachAll ()

        {

// Tu môžete napísať svoju vlastnú implementáciu alebo zavolať základnú verziu

base.UnRegisterAll ();

        }

verejné prepísanie zrušiť upozornenie ()

        {

foreach (Pozorovateľ pozorovateľ v lstObservers)

            {

observer.Update ();

            }

        }

    }

Trieda ConcreteObserver je uvedená nižšie. Nechávam na čitateľov, aby si v metóde Update napísali svoj vlastný kód na odoslanie e-mailu s oznámením, že bol článok zverejnený, atď.

verejná trieda ConcreteObserver: Pozorovateľ

    {

verejný reťazec Email

        {

dostať; sada;

        }

public override void Update ()

        {

Console.WriteLine ("Vnútri metódy aktualizácie ...");

        }

    }

Viac o dizajnovom vzore Observer sa dozviete z tohto odkazu.

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