需要两个构造函数来实现
- 创建观察者
a.需要一个身份证明 b.需要一个技能 - 创建被观察者
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