美文网首页
Javascript设计模式-观察者模式

Javascript设计模式-观察者模式

作者: 宣大头 | 来源:发表于2019-10-15 17:32 被阅读0次

    特点

    1.发布/订阅的关系(但是它和发布订阅模式不是一样的,谨记)

    2.一对N

    //观察者模式js代码示例

    //主题

    class Subject {

      constructor() {

        this.state = 0

        this.observers =[]

      }

      getState() {

        return this.state

      }

      setState(state) {

        this.state = state

        this.notifyAllObservers()

      }

      notifyAllObservers() {

        this.observers.forEach((observer) => {

          observer.update()

        })

      }

      attach(observer) {

        this.observers.push(observer)

      }

    }

    //观察者

    class Observer {

      constructor(name, subject) {

        this.name = name

        this.subject = subject

        this.subject.attach(this)

      }

      update() {

        console.log(this.name + 'update, state:' + this.subject.getState())

      }

    }

    //测试

    let subject = new Subject()

    let o1 = new Observer('o1', subject)

    let o2 = new Observer('o2', subject)

    let o3 = new Observer('o3', subject)

    subject.setState(1)

    subject.setState(2)

    subject.setState(3)

    写到这里,我突然发现观察者模式代码有点耦合,俗称轻耦合,然后我很自觉的去百度了一下,怎么样实现完全解耦呢,百度告诉我答案,下面简单介绍一下:

    观察者模式虽然有发布订阅这种类似的关系,但是和正在的发布订阅其实是不一样的,真正的发布订阅是完全解耦;意思是观察者模式有两个对象一个观察者一个被观察者,两个直接接触,但是真正的发布订阅其实还有个代理人,俗称Broker(经理人),举个比较庸俗的例子:

    观察者模式就是男的出轨,两个女的直接对决,发布订阅就是男的在中间调解,哈哈,有点垃圾~

    相关文章

      网友评论

          本文标题:Javascript设计模式-观察者模式

          本文链接:https://www.haomeiwen.com/subject/wsbsmctx.html