观察者模式

Observer

概述
包括:观察者和观察目标
一个目标可以有很多观察者与之关联
一旦目标状态发生变化,将通知所有观察者,观察者据此做出响应
与订阅-发布模式比较类似
无法细分管控
应用
面包屑导航
参考代码
Observer
class Subject {
  constructor() {
    this.observers = []
  }
  add(obj) {
    this.observers.push(obj)
  }
  remove(obj) {
    this.observers = this.observers.filter(item => item != obj)
  }
  notify() {
    this.observers.forEach(item => item.update())
  }
}

class Observer {
  constructor(name) {
    this.name = name
  }
  update() {
    console.log(this.name + ' updated');
  }
}
Usage
let ob1 = new Observer('gl')
let ob2 = new Observer('sh')
let sub = new Subject()
sub.add(ob1)
sub.add(ob2)
sub.notify()
面包屑导航
无序列表实现
DOM获取
事件委托
参数传递
DOM更新
Observer
class Subject {
  constructor() {
    this.observers = []
  }
  add(obj) {
    this.observers.push(obj)
  }
  remove(obj) {
    this.observers = this.observers.filter(item => item != obj)
  }
  notify(str) {
    this.observers.forEach(item => item.update(str))
  }
}

class Observer {
  constructor(name) {
    this.el = document.querySelector(name)
  }
  update(str) {
    this.el.innerHTML = str
  }
}
let sub = new Subject()
let obj = new Observer('#bread')
sub.add(obj)
news.addEventListener('click', (e) => {
  if (e.target.tagName == 'LI') {
    sub.notify(e.target.innerHTML)
  }
})