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

     一、知识点   观察者模式(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
全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-18 22:30
我看都是谁在卷前端!
秋盈丶:搜了下,20人的公司能收到2000份招呼?真有这么夸张吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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