@xcore24/observer
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

observer

observer is TypeScript library implementing the Observer pattern.

Installation

To start using observer install the npm package:

npm i @xcore24/observer

Basic Usage

import { ObservableSubject, Observer } from '@xcore24/observer'

// Определим кастомный тип для уведомлений
type Context = {
    oldPrice: number
    newPrice: number
}

// Создадим базовый класс для работы с супермаркетами
// Будем наблюдать за некоторыми из них
class SuperMarket extends ObservableSubject<Context> {
    private _price: number  = 240

    set price (newPrice: number) {
        const oldPrice = this._price
        this._price = newPrice
        const context: Context = {
            oldPrice,
            newPrice
        }

        // Уведомляем подписчиков об изменении некоторого состояния
        this.notifyChange(context)
    }

    get price () {
        return this._price
    }

}

// Создадим базового наблюдателя за стоимостью товаров
class ChangePricesObserver extends Observer<Context> {
    // Реализуем метод который будет вызываться у наблюдателя каждый раз, когда изменяется стоимость
    // Каждый наблюдатель может по-своему реагировать на данное изменение
    change(context: Context): void {
        const {oldPrice, newPrice} = context
        // Для тестирования возьмем первый из коллекции наблюдаемый субъект
        // В реальной жизни его можно передавать через context
        const subjectName = this.observableSubjects[0].name
        console.log([`Налюдатель "${this.name}" заметил, что в магазине "${subjectName}" изменилась стоимость на товар X. Старая цена "${oldPrice}". Новая цена: "${newPrice}"`])
    }
}

// Создаем объект супермакета МАГНИТ за которым хотим наблюдать
// Обычно в нем изменяются цены на продукты и нас об этом не уведомляют (даже на кассе) :(
// Но мы, пожалуй, исправим сейчас это ;)
const magnit = new SuperMarket('МАГНИТ')

// Поставим наблюдателей в этот магаз -- пусть смотрят и нас уведомляют вовремя
const observer1 = new ChangePricesObserver('Иван')
const observer2 = new ChangePricesObserver('Алексей')
const observer3 = new ChangePricesObserver('Антон')

// Добавляем наблюдателей в наблюдаемый объект
magnit
    .attach(observer1)
    .attach(observer2)
    .attach(observer3)

// Установим новую стоимость
magnit.price = 390

Package Sidebar

Install

npm i @xcore24/observer

Weekly Downloads

0

Version

1.0.4

License

ISC

Unpacked Size

12.3 kB

Total Files

20

Last publish

Collaborators

  • xcore24