Ohjelmointi

Tarkkailijan suunnittelumallin toteuttaminen C #: ssä

Tarkkailijan suunnittelumalli kuuluu käyttäytymismallin luokkaan ja sitä käytetään, kun haluat ilmoittaa muutoksesta useisiin luokkiin. Käyttäytymissuunnittelumallit ovat sellaisia, joita käytetään kohteiden yhteistyöhön ja vastuun delegointiin.

Pohjimmiltaan Observer-suunnittelukuviota käytetään määrittämään, kuinka sovelluksen komponenttien välinen viestintä on vuorovaikutuksessa toistensa kanssa tai ilmoittaa toisilleen lähettämällä viestejä. Tässä mallissa kohde ylläpitää luetteloa tarkkailijoista ja ilmoittaa sitten näille tarkkailijoille tai huollettaville, kun tilanmuutos tapahtuu. Voit lisätä tai poistaa tarkkailijoita myös ajon aikana.

Sovellettavuus

Milloin sinun tulisi käyttää tätä suunnittelumallia? Se on hyvä valinta, kun haluat aiheen, jonka yhden tai useamman tarkkailijan on tarkkailtava. Se on suosittu suunnittelumalli, joka auttaa sinua toteuttamaan julkaisija / tilaaja-skenaarion, jossa kohteen tilan muutoksista voidaan ilmoittaa kaikille riippuvaisille kohteille tai tilaajille (julkaisijan / tilaajan skenaarion tyypillisessä toteutuksessa). Tarkkailijan suunnittelumallissa kohteen tilamuutokset välitetään toiselle objektille, jotta esineiden tarve on tiukasti kytketty toisiinsa.

MVC (Model View Component) -arkkitehtuurikuvio on klassinen esimerkki Observer-suunnittelumallin toteutuksesta. MVC-arkkitehtuurikuviota käytetään rakentamaan sovelluksia, jotka on yhdistetty löyhästi, helpompi testata ja ylläpitää. Tyypillisessä MVC-toteutuksessa näkymä ja malli on irrotettu toisistaan. Näkymä edustaa tarkkailijaa, mutta malli edustaa havaittavaa objektiasi.

Tarkkailijan suunnittelumallin toteuttaminen

Meillä on ollut tarpeeksi käsitteitä - ymmärretään nyt tämä suunnittelumalli toteutuksella. Ensinnäkin meidän on tiedettävä osallistuvat luokat tai tyypit.

  • Aihe: Tätä edustaa tyyppi, jota käytetään määrittelemään rajapinta yhden tai useamman tarkkailijan kiinnittämiseksi tai irrottamiseksi
  • Betoni Aihe: Tätä käytetään ilmoittamaan tarkkailijoille tilan muutoksesta
  • Tarkkailija: Tämä edustaa tyyppiä, josta tulisi ilmoittaa muutoksen tapahtuessa
  • Tarkkailija: Tämä edustaa tarkkailijan tyypin konkreettista toteutusta

Tarkkailijan suunnittelumallin tyypillisessä toteutuksessa saatat haluta olla Aihe- ja Tarkkailija-tyyppi. Tässä on koodinpätkä, joka kuvaa tätä.

julkinen abstrakti luokka Aihe

    {

suojattu luettelo lstObservers = uusi luettelo ();

suojattu mitätön rekisteri (tarkkailijan tarkkailija)

        {

lstObservers.Add (tarkkailija);

        }

suojattu mitätöi Poista rekisteröinti (tarkkailijan tarkkailija)

        {

lstObservers.Remove (tarkkailija);

        }

suojattu mitätöi Poista kaikki ()

        {

foreach (tarkkailijan tarkkailija lstObserversissa)

            {

lstObservers.Remove (tarkkailija);

            }

        }

julkinen abstrakti mitätön Ilmoita ();

    }

julkinen abstrakti luokka Tarkkailija

    {

public abstract void Päivitys ();

    }

Katso nyt yllä annettu koodinpätkä. Aihe-luokka sisältää luettelon tarkkailija-instansseista ja muutamia tapoja lisätä tai poistaa tilaajia, ts. Tarkkailija-luokan instansseja. Huomaa, että Notify-menetelmä on julistettu abstraktiksi - luokan, joka jatkaisi Subject-luokkaa, on toimitettava vastaava toteutus tälle menetelmälle. Observer-luokka sisältää vain yhden menetelmän - päivitysmenetelmän. Olen tehnyt tämän toteutuksen mahdollisimman yksinkertaiseksi.

BlogPost-luokka laajentaa Aihe-luokkaa ja toteuttaa Aihe-luokassa abstraktiksi julistetun Notify-menetelmän.

julkisen luokan BlogPost: Aihe

    {

public void Liite (tarkkailijan tarkkailija)

        {

// Voit kirjoittaa oman toteutustasi tähän tai soittaa perusversioon

base.Rekisteröi (tarkkailija);

        }

public void Detach (tarkkailijan tarkkailija)

        {

// Voit kirjoittaa oman toteutustasi tähän tai soittaa perusversioon

base.UnRegister (tarkkailija);

        }

public void DetachAll ()

        {

// Voit kirjoittaa oman toteutustasi tähän tai soittaa perusversioon

base.UnRegisterAll ();

        }

public override void Ilmoita ()

        {

foreach (tarkkailijan tarkkailija lstObservers-ohjelmassa)

            {

tarkkailija.Päivitä ();

            }

        }

    }

ConcreteObserver-luokka on esitetty alla. Jätän lukijoiden tehtäväksi kirjoittaa oman koodinsa päivitysmenetelmään lähettääksesi sähköpostiviestin siitä, että artikkeli on lähetetty, tai jne.

julkinen luokka ConcreteObserver: Tarkkailija

    {

julkinen merkkijono Sähköposti

        {

saada; aseta;

        }

public override void Update ()

        {

Console.WriteLine ("Inside the Update method ...");

        }

    }

Tästä linkistä saat lisätietoja Observer-suunnittelumallista.

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