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[] = [];