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('Ням-ням-ням!');