Observer-suunnittelumallin käyttöönotto TypeScriptissä

Observer-suunnittelumallin käyttöönotto TypeScriptissä

Suunnittelumalli on malli, joka ratkaisee ohjelmistosuunnittelussa usein toistuvan ongelman.





Tarkkailijamalli, joka tunnetaan myös nimellä julkaisu-tilausmalli, on käyttäytymismalli. Sen avulla voit ilmoittaa useille objekteille tai tilaajille kaikista tapahtumista, jotka on julkaistu heidän tarkkailemassaan objektissa.





PÄIVÄN VIDEON TEKEMINEN

Täällä opit toteuttamaan tarkkailijan suunnittelumallin TypeScriptissä.





Tarkkailijamalli

Havaintomalli toimii määrittelemällä yksi-moneen -suhteen julkaisijan ja sen tilaajien välillä. Kun julkaisijassa tapahtuu tapahtuma, se ilmoittaa tapahtumasta kaikille tilaajille. Yksi laajalle levinnyt esimerkki tästä mallista on JavaScript-tapahtuman kuuntelijat .

Oletetaan kontekstissa, että rakennat varastoseurantaa, joka seuraa myymäläsi tuotteiden määrää. Tässä tapauksessa myymäläsi on aihe/julkaisija ja varastosi tarkkailija/tilaaja. Tarkkailijasuunnittelumallin käyttäminen olisi optimaalista tässä tilanteessa.



Tarkkailijasuunnittelumallissa aineluokkasi on otettava käyttöön kolme menetelmää:

  • An liittää menetelmä. Tämä menetelmä lisää aiheeseen tarkkailijan.
  • A irrottaa menetelmä. Tämä menetelmä poistaa tarkkailijan kohteesta.
  • A ilmoita/päivitä menetelmä. Tämä menetelmä ilmoittaa kohteen tarkkailijoille, kun kohteen tila muuttuu.

Tarkkailijaluokkasi tulee toteuttaa yksi menetelmä, the päivittää menetelmä. Tämä menetelmä reagoi, kun kohteen tila muuttuu.





Aihe- ja tarkkailijaluokkien toteuttaminen

Ensimmäinen askel tämän mallin toteuttamisessa on luoda rajapinnat subjektille ja tarkkailijaluokalle sen varmistamiseksi, että ne toteuttavat oikeat menetelmät:

// Subject/Publisher Interface 
interface Subject {
attachObserver(observer: Observer): void;
detachObserver(observer: Observer): void;
notifyObserver(): void;
}

// Observer/Subscriber Interface
interface Observer {
update(subject: Subject): void;
}

Yllä olevan koodilohkon liitännät määrittelevät menetelmät, jotka konkreettisten luokkien on toteutettava.





Konkreettinen aiheluokka

Seuraava askel on toteuttaa konkreettinen aineluokka, joka toteuttaa Aihe käyttöliittymä:

mikä on funktio ohjelmoinnissa
// Subject 
class Store implements Subject {}

Alusta seuraavaksi Aihe 's tila Store luokkaa. Kohteen tarkkailijat reagoivat tämän tilan muutoksiin.

Tässä tapauksessa tila on numero, ja tarkkailijat reagoivat luvun kasvuun:

// Subject state 
private numberOfProducts: number;

Alusta seuraavaksi joukko tarkkailijoita. Tämän taulukon avulla voit seurata tarkkailijoita:

// initializing observers 
private observers: Observer[] = [];