通过实现观察者模式,我们解耦了主题和观察者,使它们能够独立变化。主题可以通知多个观察者,而观察者可以根据需要进行相应的处理。这种模式在许多场景中都非常有用,如事件监听、数据变化通知等。

     一、知识点   观察者模式(Observer Pattern)是一种软件设计模式,它定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。   在观察者模式中,有以下几个角色:       主题(Subject):被观察的对象,它拥有状态并可以修改状态。    观察者(Observer):观察主题的对象,当主题的状态发生改变时,观察者会收到通知。    具体主题(ConcreteSubject):具体的被观察对象,它实现了主题的接口,持有观察者列表,并在状态改变时通知观察者。    具体观察者(ConcreteObserver):具体的观察对象,它实现了观察者的接口,接收主题的通知并进行相应的处理。         二、思路分析   实现观察者模式的关键是解耦主题和观察者,让它们能够独立变化。以下是一些基本的思路:       主题持有观察者列表,当状态改变时遍历通知观察者。    观察者通过注册或订阅方式向主题登记,以便接收通知。    主题和观察者之间定义一个接口,用于通知状态变化。      三、JavaScript 解答   以下是使用 JavaScript 实现观察者模式的一个简单示例:   class Subject {  constructor() {    this.observers = [];  }  attachObserver(observer) {    this.observers.push(observer);  }  detachObserver(observer) {    this.observers = this.observers.filter(item => item !== observer);  }  notifyObservers() {    this.observers.forEach(observer => observer.update());  }}class Observer {  constructor(name) {    this.name = name;  }  update() {    console.log(`${this.name} 收到通知`);  }}// 创建主题对象const subject = new Subject();// 创建观察者对象const observer1 = new Observer('Observer 1');const observer2 = new Observer('Observer 2');// 观察者注册到主题subject.attachObserver(observer1);subject.attachObserver(observer2);// 主题发出通知subject.notifyObservers();// 观察者取消注册subject.detachObserver(observer1);// 主题再次发出通知subject.notifyObservers();   在上述示例中,我们创建了一个Subject类和一个Observer类。Subject类负责管理观察者,并提供了attachObserver、detachObserver和notifyObservers方法。Obs类是具体的观察者,它实现了方法用于接收通知。        
点赞 2
评论 2
全部评论

相关推荐

面试官问:为什么不考研?该怎么回答啊😭我说现在的就业环境差到底了,还有就是我不想学数学,感觉面试官笑容都凝固了😢
DayDayNoBug的鲜芋球:我说的是“上学期其实尝试过去探索一些研究的方向,但感觉那些对我来说都没有很大的吸引力,相比起研究我可能更喜欢开发这种实践性的东西,它会让我觉得很有意思并且会为之深入进去”(虽然也不知这个回答怎么样哈哈哈哈哈哈)
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务