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