观察者模式的写法

需要两个构造函数来实现

  1. 创建观察者
    a.需要一个身份证明 b.需要一个技能
  2. 创建被观察者
    a.属性,自己的状态 b.队列,记录所有的观察者 c.方法,能设置自己的状态,点那个我需要改变的时候,要出发这个方法改变状态 d.方法, 添加观察者 e.方法,删除观察者
// 观察者构造函数
class Observer  {
    constructor(name,fn=() => {}) {
        this.name = name
        this.fn = fn
    }
}
// 创造两个观察者
const bzr = new Observer('班主任',(state) => {console.log('应为'+ state+'把你爸找来')})
const xz = new Observer('校长',() => {console.log('骂班主任')})

class Subject {
    constructor(status) {
        // 记录自己的状态
        this.status = status
        // 数组来保存观察着我的人
        this.observers = []
    }
    setstate (val) {
        this.status = val
        
        // 需要 把所有观察者的技能触发
        this.observers.forEach(item => {
            item.fn(val)
        })

    }
    addobserve(observer) {
        // 判断 观察者已经存在,就不添加来
        // some() find() indexOf() filter()
        const res = this.observers.some(obs => obs===observer)
        if (!res) {
            this.observers.push(observer)
        }
        
    }
}

// 创建一个被观察者
const xiaomin = new Subject('学习')

// 给小明添加观察者
xiaomin.addobserve(bzr)
xiaomin.addobserve(xz)

xiaomin.setstate('打游戏')
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享