观察者模式就是,有一个 subject 对象,然后有很多 observers 观察者对象,当 subject 对象有变化的时候去通知 observer 对象即可。观察者模式通过抽象出一个 Subject 和多个观察者,减轻了它们之间的过度耦合。再说简单点就是利用回调函数,异步完成后调用传入的回调即可。假设如下代码:
getAddress().then(res => {
const address = res.address;
A.update(address)
B.next(address)
C.change(address)
})
如果多加一个模块D,就要去翻请求代码,把D模块补上,此时各个模块代码耦合严重,如果有变化,修改成本是比较高的,那么就要通过观察者模式进行优化了
const observer = [];
observer.push(A.update);
observer.push(B.next);
observer.push(C.change);
observer.push(D.init);
observer.push(E.buy);
getAddress().then((res) => {
const address = res.address;
observer.forEach((observer) => observer(address));
});
通过观察者模式我们将获取地址后的操作解耦了出来,未来有新增模块只需要注册观察者即可。