js简单实现观察者模式

1、什么是观察者模式?

观察者模式(Observer),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

2、代码具体实现

  • 首先定义一个主题,用于接收状态变化,并通知每个观察者
// 主题,接收状态变化,并通知每个观察者
        class Sub{
            constructor(){
                this.state = 0
                this.observers = []
            }
            // 获取状态
            getState (){
                return this.state
            }
            // 设置状态
            setState(state){
                this.state = state
                this.notify()
            }
            // 新增观察者
            attach(observer){
                this.observers.push(observer)
            }
            // 通知每个观察者
            notify(){
                this.observers.forEach(observer =>{
                    observer.update()
                })
            }
        }
  • 然后再定义一个观察者,里面有一个用于更新状态的方法,主要职责:等待被通知
 // 观察者,等待被通知
        class Observe{
            constructor(name,sub){
                this.name = name
                this.sub = sub
                this.sub.attach(this)
            }
            
            update(){
                console.log(`${this.name} 观察者更新了state:${this.sub.getState()}`);
            }
        }

  • 测试代码
		// 实例化一个主题
		let s = new Sub()
		// 添加观察者实例
		let o1 = new Observe('o1',s)
		// 设置状态
		s.setState(2)

  • 使用以上方式观察可能效果不够明显,可使用一个输入框使用输入的内容作为输入的状态,观察改变控制台变化(此种方式需要在页面写一个输入框,并绑定事件)
 <input type="text" id="app" oninput="handleInput(event)">
 function handleInput(e){
            let event = e || event
            s.setState(event.target.value)
            // s2.setState(event.target.value)
        }

实现效果如下
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值