您的位置:首页 > 财经 > 产业 > 企业管理咨询公司简介_长沙人才网_中国搜索引擎排行榜_大连网络营销seo

企业管理咨询公司简介_长沙人才网_中国搜索引擎排行榜_大连网络营销seo

2024/12/23 21:01:42 来源:https://blog.csdn.net/qq_35770417/article/details/144315337  浏览:    关键词:企业管理咨询公司简介_长沙人才网_中国搜索引擎排行榜_大连网络营销seo
企业管理咨询公司简介_长沙人才网_中国搜索引擎排行榜_大连网络营销seo

本人是JavaScript开发者,以下的示例也是以Javascript举例来说明的。

一、概念

当对象间存在一对多的关系时,使用观察者模式。当被观察的对象发生变化时,其所有的观察者都会收到通知并进行相应的操作。

二、具体例子

比如说,学生小明情绪比较容易波动,所以当小明的情绪发生变化时,父母和老师希望及时获得通知,以便可以采取适当的措施来帮助他。

  • 首先家长和老师都是「观察者」;
  • 小明是「被观察者」;
  • 家长和老师对小明的情绪状态很关注,就需要「订阅事件」;
  • 当被观察者小明情绪发生变化的时候,他会通知所有注册过的观察者;
  • 例如,如果小明感到很开心,他会告诉父母和老师:“我今天心情很好!”;如果他感到沮丧,他也会告诉父母和老师:“我今天感觉不太好。”这个过程我们称之为「通知变化」;

三、代码实现

// 被观察者,学生
class Subject {constructor() {this.state = 'happy';// 存储所有观察者this.observers = [];}// 新增所有观察者add(o){this.observers.push(o)}//获取状态getState() {return this.state;}//更新状态并通知所有的观察者setState(newStae) {this.state = newStae;this.notify()}//通知所有的观察者notify() {this.observers.forEach(o => o.update(this))}}// 观察者  父母和老师
class Observer {constructor(name) {this.name = name;}update(student) {console.log(`亲爱的${this.name},通知您当前学生的状态是:${student.getState()}`);}
}

被观察者和观察者都用JS实现了,来看一下具体的应用:

    // 被观察者const student = new Subject()// 观察者const parent = new Observer('父母')const teacher = new Observer('老师')student.add(parent)student.add(teacher)student.setState('Sad')

来看一下控制台打印出来的:

以上就是一个简单的观察者模式。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com