Skip to content

Instantly share code, notes, and snippets.

@xinlc
Last active June 20, 2019 05:03
Show Gist options
  • Save xinlc/5b8a398c2db9bac74797773d53604cd1 to your computer and use it in GitHub Desktop.
Save xinlc/5b8a398c2db9bac74797773d53604cd1 to your computer and use it in GitHub Desktop.
观察者模式
// 在观察者模式中,观察者是知道Subject的,Subject一直保持对观察者进行记录。
// 观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。
// 观察者
class Observer {
constructor() {
}
update(val) {
console.log(val);
}
}
// 观察者列表
class ObserverList {
constructor() {
this.observerList = []
}
add(observer) {
return this.observerList.push(observer);
}
remove(observer) {
this.observerList = this.observerList.filter(ob => ob !== observer);
}
count() {
return this.observerList.length;
}
get(index) {
return this.observerList[index];
}
}
// 目标
class Subject {
constructor() {
this.observers = new ObserverList();
}
addObserver(observer) {
this.observers.add(observer);
}
removeObserver(observer) {
this.observers.remove(observer);
}
notify(...args) {
let obCount = this.observers.count();
for (let i = 0; i < obCount; i++) {
this.observers.get(i).update(...args);
}
}
}
// let sub = new Subject();
// sub.addObserver(new Observer());
// sub.notify(123);
// sub.addObserver(new Observer());
// sub.notify(1234);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment