设计模式-观察者模式

class Subject {//发布者 ①
            constructor(state){//②
                this.state = state//监听的值
                this.obsovers = []//观察者列表
            }
            getter(){//获得值 ③
                return this.state
            }
            setter(state){//设置值 ④
                this.state = state
                this.notify()
            }
            notify(){//通知各个观察者 ⑤
                this.obsovers.forEach((obsover)=>{
                    obsover.update()
                })
            }
            addToAbsovers(o){//添加观察者 ⑥
                this.obsovers.push(o)
            }
        }

        class Obsover {//订阅者 ⑦
            constructor(name, subject){
                this.subject = subject //⑧
                this.name = name
                this.subject.addToAbsovers(this) //⑨
            }
            update(){//订阅者收到消息后的处理方法 ⑩
                console.log(`对象 ${this.name}  设置值为 ${this.subject.getter()}`)
            }
        }

        let subject = new Subject()
        let obj1 = new Obsover('obj1',subject)
        let obj2 = new Obsover('obj2',subject)
        let obj3 = new Obsover('obj3',subject)
        let obj4 = new Obsover('obj4',subject)


        setTimeout(()=>{
            subject.setter(30)
        },2000)

执行思路:
①.定义发布者
②.初始化需要监听的值,以及订阅者列表
③.定义获得值的方法
④.定义改变值的方法
⑤.改变的同时触发通知方法(在此调用每个订阅者的更新方法)
⑥.定义添加订阅者的方法,需要添加时调用
⑦.定义订阅者
⑧.订阅者初始化接收发布者的实例对象
⑨.在初始化中添加自己到订阅者列表
⑩.定义更新方法,每次触发时得到发布者更新的值

转载于:https://www.cnblogs.com/yzyh/p/10319086.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值