Az Observer tervezési minta megvalósítása TypeScriptben

Az Observer tervezési minta megvalósítása TypeScriptben

A tervezési minta egy olyan sablon, amely a szoftvertervezés során gyakran visszatérő problémát old meg.





A megfigyelő minta, más néven közzététel-feliratkozás minta, egy viselkedési minta. Lehetővé teszi több objektum vagy előfizető értesítését az általuk megfigyelt objektumban közzétett eseményekről.





MAKEUSEOF A NAP VIDEÓJA

Itt megtudhatja, hogyan valósítsa meg a megfigyelő tervezési mintáját TypeScriptben.





A megfigyelő minta

A megfigyelő minta úgy működik, hogy egy-a többhez viszonyt határoz meg a kiadó és előfizetői között. Amikor egy esemény történik a kiadóban, minden előfizetőt értesít az eseményről. Ennek a mintának az egyik elterjedt példája JavaScript eseményfigyelők .

A kontextus szempontjából tegyük fel, hogy egy készletkövetőt hoz létre, amely nyomon követi az üzletében található termékek számát. Ebben az esetben az Ön üzlete a tárgy/kiadó, a készlete pedig a megfigyelő/előfizető. Ebben a helyzetben a megfigyelő tervezési minta alkalmazása lenne az optimális.



az iPhone nem csatlakozik a számítógéphez

A megfigyelő tervezési mintában a tantárgy osztályának három módszert kell megvalósítania:

  • An csatolni módszer. Ez a módszer megfigyelőt ad az alanyhoz.
  • A leválasztani módszer. Ez a módszer eltávolítja a megfigyelőt az alanyból.
  • A értesíteni/frissíteni módszer. Ez a módszer értesíti az alany megfigyelőit, ha az alany állapota megváltozik.

A megfigyelő osztálynak egy módszert kell megvalósítania, a frissítés módszer. Ez a módszer akkor reagál, ha az alany állapota megváltozik.





Az alany és a megfigyelő osztályok megvalósítása

A minta megvalósításának első lépése interfész létrehozása az alany és a megfigyelő osztály számára, hogy biztosítsák a megfelelő metódusok megvalósításá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;
}

A fenti kódblokkban található interfészek meghatározzák azokat a metódusokat, amelyeket a konkrét osztályoknak implementálniuk kell.





Egy konkrét tantárgy osztály

A következő lépés egy konkrét tantárgyosztály megvalósítása, amely megvalósítja a Tantárgy felület:

miért nem működik az egér a laptopomon?
// Subject 
class Store implements Subject {}

Ezután inicializálja a Tantárgy ’s állapot a Bolt osztály. Az alany megfigyelői reagálnak az állapot változásaira.

Ebben az esetben az állapot egy szám, és a megfigyelők a szám növekedésére reagálnak:

// Subject state 
private numberOfProducts: number;

Ezután inicializálja a megfigyelők tömbjét. Ezzel a tömbbel követheti nyomon a megfigyelőket:

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