js实现发布订阅模式与观察者模式

53次阅读

共计 675 个字符,预计需要花费 2 分钟才能阅读完成。

发布订阅模式

发布订阅模式直接没有关联,可以不发布只订阅 也可以只订阅不发布
例:

const event = {_arr: [],
    on(fn) {this._arr.push(fn)
    },
    emit() {
        this._arr.forEach(fn => {fn()
        })    
    }
}

event.on(() => {console.log('数据来了')
})
const obj = {}
event.on(() => {if(Object.keys(obj).length == 2) {console.log(obj)
   }
})

obj.name = 'test'
event.emit() 
obj.age = 12
event.emit()

观察者模式

(基于发布订阅的,而且观察者模式发布订阅之间是有关联的)

class Subject {constructor () {
        this.state = '开心'
        this.observers = []}
    attach (o) {this.observers.push(o)
    }
    setState (newState) {
        this.state = newState
        this.observers.forEach(o => {o.update(this)
        })
    }
}

class Observer {update (sub) {console.log('被观察着的状态是:' + sub.state)
    }
}

const mama = new Observer()
const baba = new Observer()
const baby = new Subject()
baby.attach(mama)
baby.attach(baba)
baby.setState('不开心')

正文完
 0