class Subject {
constructor() {
this.state = "happy"
this.observers = [];
}
add(o) {
this.observers.push(o);
}
getState() {
return this.state;
}
setState(newState) {
this.state = newState;
this.notify();
}
notify() {
this.observers.forEach(o => o.update(this));
}
}
class Observer {
constructor(name) {
this.name = name;
}
update(student) {
console.log(`${this.name} is ${student.getState()}`);
}
}
let student = new Subject();
let parent = new Observer("parent");
let teacher = new Observer("teacher");
student.add(parent);
student.add(teacher);
student.setState("sad");