Показать сообщение отдельно
  #3 (permalink)  
Старый 05.03.2018, 11:19
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

gevaraweb,
Похоже на Наблюдателя
// Observable
class Man {
    constructor(name) {
        this.name = name;
        this.observers = new Set();
    }
    attach(observer) {
        this.observers.add(observer);
    }
    detach(observer) {
        this.observers.delete(observer);
    }
    notify(message) {
        this.message = message;
        for (let observer of this.observers)
            observer.update(this);
    }
}
// Observer1
class Dog {
    constructor(name) {
        this.name = name;
    }
    update(observable) {
        console.log(`> ${observable.name}: ${observable.message}`);
        console.log(`< ${this.name}: Гав-гав!`);
    }
}
// Observer2
class Cat {
    constructor(name) {
        this.name = name;
    }
    update(observable) {
        console.log(`> ${observable.name}: ${observable.message}`);
        console.log(`< ${this.name}: Мяв-мяв!`);
    }
}

let vasya = new Man('Вася');
let tuzik = new Dog('Тузик');
let murka = new Cat('Мурка');

vasya.attach(tuzik);
vasya.attach(murka);
vasya.notify('Ням-ням!');
vasya.detach(murka);
vasya.notify('Ням-ням-ням!');
Ответить с цитированием