清明在家闲着也是闲着(疫情封控躺的腰酸背痛),来实现一个简单的观察者模式demo叭
先用大白话解释下什么是观察者模式,三月,是个悲伤的31个日子,相信大A的同学并不好过,不过每天工作挺轻松的,毕竟每天都是下午三点才开始写代码(收盘),command+tab两个键已经褪色很多,毕竟得时刻关注纺织机的走线,过高或过低都可能对应加仓或止损,此时股市就是被观察者,而韭菜就是观察者,当被观察者变化时,就会通知观察者做出对应响应。
class Stocks {
constructor(name) {
this.name = name
this.state = ''
this.observers = []
}
attach (observer) {
this.observers.push(observer)
}
getState () {
return this.state
}
setState (state) {
this.state = state
this.notifyAllObservers()
}
notifyAllObservers () {
if (this.observers.length > 0) {
this.observers.forEach(observer => observer.update(this.state))
}
}
}
class Leek {
constructor(name, stock) {
this.name = name
stock.attach(this)
}
update (newState) {
this.state = newState
}
action (cb) {
cb.call(this)
}
}
const stock = new Stocks('海狗')
const leek1 = new Leek('辣条1', stock)
const leek2 = new Leek('辣条2', stock)
stock.setState('抄底时机已到')
const leek1Cb = function () {
if (this.state === '抄底时机已到') {
console.log(`我是韭菜${this.name},${this.state},加仓加仓!`)
}
}
const leek2Cb = function () {
if (this.state === '抄底时机已到') {
console.log(`我是韭菜${this.name},${this.state}?你他么是想抄我家吧!`)
}
}
leek1.action(leek1Cb)
leek2.action(leek2Cb)
