1. 观察者模式的定义
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。
class Star {
constructor(name) {
this.name = name;
this.state = '';
this.observers = [];
}
getState() {
return this.state;
}
setState(state) {
this.state = state;
this.notifyAllObservers();
}
attach(observer) {
this.observers.push(observer);
}
notifyAllObservers() {
this.observers.forEach(observer => observer.update());
}
}
class Fan {
constructor(name, subject) {
this.name = name;
this.subject = subject;
this.subject.attach(this);
}
update() {
console.log(`${this.subject.name}有新的状态-${this.subject.getState()},${this.name}正在更新`);
}
}
2. 场景
2.1 Promise
class Promise{
constructor(fn) {
this.callbacks=[];
let resolve=() => {
this.callbacks.forEach(callback => callback())
};
fn(resolve);
}
then(callback) {
this.callbacks.push(callback);
}
}
let promise=new Promise(function (resolve,reject) {
setTimeout(function () {
resolve(100);
},1000);
});
promise.then(() => console.log(1));
promise.then(() => console.log(2));
2.2 事件绑定
<button id="btn">click</button>
<script>
let btn = document.getElementById('btn');
btn.addEventListener('click',()=>{alert(1)});
btn.addEventListener('click',()=>{alert(2)});
btn.addEventListener('click',()=>{alert(3)});
</script>