活动介绍

设计模式之观察者模式1

preview
需积分: 0 2 下载量 23 浏览量 更新于2022-08-08 收藏 21KB DOCX 举报
【观察者模式】是软件设计模式中的一种行为模式,它实现了对象之间的一对多依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在JavaScript中通常通过回调函数来实现,常用于事件处理、实时数据更新等场景。 在JavaScript中,我们可以创建一个`pubsub`对象来实现观察者模式。`pubsub`对象包含三个主要方法:`subscribe`(订阅)、`unsubscribe`(退订)和`publish`(发布)。`subscribe`方法用于注册回调函数到特定主题(topic)上,`unsubscribe`用于移除已注册的回调,而`publish`则用于触发主题的更新,调用所有订阅了该主题的回调函数。 以下是对`pubsub`对象的详细解释: 1. **订阅方法 (`subscribe`)**:此方法接受两个参数,一个是主题名,另一个是回调函数。它会检查主题是否存在,如果不存在则创建一个新的空数组。然后,它会为每次订阅生成一个唯一的标识符(token),并将包含token和回调函数的对象存储在对应主题的数组中。 2. **退订方法 (`unsubscribe`)**:此方法接收一个token作为参数,遍历所有主题及其订阅者,找到与token匹配的订阅者并将其从数组中删除。如果找不到匹配项,则返回false。 3. **发布方法 (`publish`)**:此方法接收一个主题名和任意数量的参数,用于传递给订阅者的回调函数。它首先检查主题是否存在,若不存在则返回false。接着,它会异步执行所有订阅该主题的回调函数,将主题名和提供的参数传递给它们。 在实际使用中,我们可以通过`subscribe`方法订阅某个主题,然后通过`publish`方法发布更新。为了能退订,我们需要保存订阅时返回的token,之后可以使用这个token调用`unsubscribe`方法取消订阅。 例如: ```javascript var testSubscription = pubsub.subscribe('example1', function (topics, data) { console.log(topics + ": " + data); }); // 发布通知 pubsub.publish('example1', 'hello world!'); pubsub.publish('example1', ['test', 'a', 'b', 'c']); pubsub.publish('example1', [{ 'color': 'blue' }, { 'text': 'hello'}]); // 退订 pubsub.unsubscribe(testSubscription); ``` 在这个例子中,`testSubscription`变量保存了订阅的token,使得我们可以在需要时取消订阅。 观察者模式的优点在于: 1. **松耦合**:主题对象与观察者之间是抽象的接口关系,两者可以独立开发和扩展。 2. **可扩展性**:添加或移除观察者非常方便,无需修改原有代码。 3. **广播通信**:当主题状态变化时,所有观察者都能自动接收到通知,实现了简单的广播机制。 4. **灵活性**:页面加载后,可以动态地将目标对象与观察者关联。 总结来说,观察者模式是一种强大的设计模式,它提高了代码的可维护性和可扩展性,尤其在需要实时更新或事件驱动的系统中,如前端开发中的用户交互事件处理、实时数据流同步等场景。通过理解并正确应用观察者模式,可以编写出更加灵活、易于维护的JavaScript代码。
身份认证 购VIP最低享 7 折!
30元优惠券