Шаблонът за проектиране е шаблон, който решава често повтарящ се проблем в софтуерния дизайн.
Моделът на наблюдател, известен също като модел публикуване-абониране, е поведенчески модел. Тя ви позволява да уведомите множество обекти или абонати за всяко събитие, което е публикувано в обекта, който те наблюдават.
MAKEUSEOF ВИДЕО НА ДЕНЯ
Тук ще научите как да внедрите шаблона за проектиране на наблюдател в TypeScript.
Моделът на наблюдателя
Моделът на наблюдател работи, като дефинира връзка 'един към много' между издателя и неговите абонати. Когато възникне събитие в издателя, той ще уведоми всички абонати за това събитие. Един широко разпространен пример за този модел е JavaScript слушатели на събития .
За контекст, приемете, че създавате инструмент за проследяване на инвентара, който следи броя на продуктите във вашия магазин. В този случай вашият магазин е субект/издател, а вашият инвентар е наблюдател/абонат. Използването на шаблона за проектиране на наблюдателя би било оптимално в тази ситуация.
вижте кого сте блокирали във фейсбук
В шаблона за проектиране на наблюдателя вашият предметен клас трябва да имплементира три метода:
- Ан прикачвам метод. Този метод добавя наблюдател към обекта.
- А отделям се метод. Този метод премахва наблюдател от обект.
- А уведомявам/актуализирам метод. Този метод уведомява наблюдателите на обекта, когато състоянието се промени в обекта.
Вашият клас наблюдател трябва да имплементира един метод, the актуализация метод. Този метод реагира, когато има промяна в състоянието на обекта.
Внедряване на класовете Subject и Observer
Първата стъпка към прилагането на този модел е да се създадат интерфейси за субект и клас наблюдател, за да се гарантира, че те прилагат правилните методи:
нямате разрешение за достъп до /index.html на този сървър.
// Subject/Publisher Interface
interface Subject {
attachObserver(observer: Observer): void;
detachObserver(observer: Observer): void;
notifyObserver(): void;
}
// Observer/Subscriber Interface
interface Observer {
update(subject: Subject): void;
}
Интерфейсите в кодовия блок по-горе дефинират методите, които вашите конкретни класове трябва да прилагат.
Конкретен предметен клас
Следващата стъпка е да се внедри конкретен предметен клас, който прилага Предмет интерфейс:
// Subject
class Store implements Subject {}
След това инициализирайте Предмет състояние в Магазин клас. Наблюдателите на обекта ще реагират на промените в това състояние.
В този случай състоянието е число и наблюдателите ще реагират на увеличаване на числото:
// Subject state
private numberOfProducts: number;
След това инициализирайте масив от наблюдатели. Този масив е начинът, по който ще следите наблюдателите:
// initializing observers
private observers: Observer[] = [];