Programavimas

Stebėtojo dizaino modelio įgyvendinimas C #

Stebėtojo dizaino modelis patenka į elgesio dizaino modelio kategoriją ir yra naudojamas, kai norite pranešti apie kelių klasių pasikeitimus. Elgesio dizaino modeliai yra tokie, kurie naudojami objektų bendradarbiavimui ir atsakomybės perdavimui spręsti.

Iš esmės „Observer“ dizaino modelis naudojamas apibrėžiant, kaip programos komponentų bendravimas sąveikauja vienas su kitu arba praneša vienas kitam, siųsdamas pranešimus. Pagal šį modelį subjektas tvarko stebėtojų sąrašą ir praneša šiems stebėtojams ar išlaikytiniams apie būsenos pasikeitimą. Stebėtojus galite pridėti arba pašalinti ir vykdymo metu.

Taikomumas

Kada turėtumėte naudoti šį dizaino modelį? Tai geras pasirinkimas, kai norėtumėte turėti temą, kurią turėtų stebėti vienas ar daugiau stebėtojų. Tai populiarus dizaino modelis, kuris padeda įgyvendinti leidėjo / abonento scenarijų, pagal kurį apie objekto būsenos pasikeitimus galima pranešti visiems priklausomiems objektams ar abonentams (tipiškai įgyvendinant leidėjo / abonento scenarijų). „Observer“ projektavimo modelyje objekto būsenos pokyčiai pranešami kitam objektui, nes nėra reikalo, kad objektai būtų glaudžiai susieti vienas su kitu.

MVC („Model View Component“) architektūrinis modelis yra klasikinis „Observer“ dizaino modelio įgyvendinimo pavyzdys. MVC architektūrinis modelis naudojamas kurti laisvai sujungtas programas, kurias lengviau išbandyti ir prižiūrėti. Įprastame MVC diegime „View“ ir „Model“ yra atsieti vienas nuo kito. Nors vaizdas rodo stebėtoją, modelis rodo jūsų stebimą objektą.

Stebėtojo dizaino modelio įgyvendinimas

Mums jau užteko koncepcijų - dabar supraskime šį dizaino modelį su įgyvendinimu. Pirmiausia turime žinoti dalyvaujančias klases ar tipus.

  • Tema: Tai reiškia tipas, kuris naudojamas sąsajai apibrėžti, norint prijungti ar atsieti vieną ar daugiau stebėtojų
  • ConcreteSubject: Tai naudojama pranešti stebėtojams, kai pasikeičia valstybė
  • Stebėtojas: Tai reiškia tipą, apie kurį reikėtų pranešti pasikeitus
  • Betono stebėtojas: Tai reiškia konkretų stebėtojo tipo įgyvendinimą

Įprastai įgyvendinant „Observer“ dizaino modelį, galbūt norėsite turėti „Subject“ ir „Observer“ tipą. Tai iliustruoja kodo fragmentas.

viešoji abstrakčioji klasė Tema

    {

apsaugotas sąrašas lstObservers = naujas sąrašas ();

saugomas negaliojančių registras (stebėtojas stebėtojas)

        {

lstObservers.Add (stebėtojas);

        }

apsaugotas negaliojantis Išregistruoti (stebėtojas stebėtojas)

        {

stebėtojai. Pašalinti (stebėtojas);

        }

apsaugotas negaliojantis UnRegisterAll ()

        {

foreach (stebėtojas stebėtojas „lstObservers“)

            {

stebėtojai. Pašalinti (stebėtojas);

            }

        }

public abstract void Pranešti ();

    }

viešoji abstrakčioji klasė Stebėtojas

    {

viešas abstraktus niekinis atnaujinimas ();

    }

Dabar žiūrėkite aukščiau pateiktą kodo fragmentą. „Subject“ klasėje yra stebėtojų egzempliorių sąrašas ir keli būdai, kaip pridėti arba pašalinti abonentus, t. Y. Stebėtojų klasės egzempliorius. Atkreipkite dėmesį, kad metodas Pranešti paskelbtas abstrakčiu - klasei, kuri išplėstų dalyko klasę, reikia pateikti atitinkamą šio metodo įgyvendinimą. Stebėtojų klasėje yra tik vienas metodas - atnaujinimo metodas. Aš padariau šį įgyvendinimą kuo paprastesnį.

„BlogPost“ klasė praplečia „Subject“ klasę ir įgyvendina „Notify“ metodą, kuris klasėje „Subject“ buvo paskelbtas abstrakčiu.

viešosios klasės „BlogPost“: tema

    {

public void Attach (stebėtojas stebėtojas)

        {

// Čia galite parašyti savo įgyvendinimą arba paskambinti į pagrindinę versiją

bazė.Registruotis (stebėtojas);

        }

public void Detach (stebėtojas stebėtojas)

        {

// Čia galite parašyti savo įgyvendinimą arba paskambinti į pagrindinę versiją

bazė.Niregistruoti (stebėtojas);

        }

public void „DetachAll“ ()

        {

// Čia galite parašyti savo įgyvendinimą arba paskambinti į pagrindinę versiją

bazė.UnRegisterAll ();

        }

public override void Pranešti ()

        {

foreach (stebėtojas stebėtojas „lstObservers“)

            {

stebėtojas. Atnaujinti ();

            }

        }

    }

„ConcreteObserver“ klasė pateikiama žemiau. Palieku skaitytojams rašyti savo kodą naudojant „Update“ metodą, kad jie išsiųstų el. Laišką pranešdami, kad straipsnis paskelbtas, ir pan.

visuomenės klasė „ConcreteObserver“: stebėtojas

    {

vieša eilutė El

        {

gauti; rinkinys;

        }

public override void Update ()

        {

Console.WriteLine („Viduje atnaujinimo metodas ...“);

        }

    }

Iš šios nuorodos galite sužinoti daugiau apie „Observer“ dizaino modelį.

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