面试必会-观察者模式

173 阅读1分钟

简单实现一个观察者模式,代码如下:

        // 被观察者
        class Subject {
            constructor(name, state) {
                this.name = name
                this.state = state
                this.observers = []
            }
            // 被观察者提供一个接受观察者的方法
            attach(observer) {
                // 将观察者收集在一起
                this.observers.push(observer)
            }
            setState(state) { // 更新被观察者的状态,同时通知所有的观察者
                this.state = state
                this.observers.forEach(item => item.updated(this.name, state))
            }
        }
        // 观察者
        class Observer {
            constructor(name) {
                this.name = name
            }
            updated(obsever, state) { // 通知所有的观察者,被观察者的状态发生变化了
                console.log(`${this.name}说:${obsever}${state}`)
            }
        }
        let sub = new Subject('son', 'legao玩的真开心')
        let o1 = new Observer('Dad')
        let o2 = new Observer('Mam')
        sub.attach(o1)
        sub.attach(o2)
        sub.setState('肚子饿了')