返回

漫谈JS进阶-设计模式:发布订阅模式

前端

前言

从八月份入职以来,在可以保证项目进度后,我便开始思考,怎么把事情做得更好,怎么提升自己。一方面,提升自己对javascript这门语言的理解,我在udemy上买了 JavaScript: Understanding the Weird Parts,中文翻译过来,就是javascript:理解那些奇怪的部分。另一方面,提升自己对项目的掌控能力,我买了几本设计模式相关的书籍,想了解一下如何设计出更优秀、更健壮的代码。

我买过好几本设计模式的书籍,包括《Head First设计模式》、《设计模式可复用面向对象软件的基础》、《设计模式精解》等等,说实话,每本书都挺不错,但是我个人感觉,这些书太理论化了,比较适合已经对设计模式有一定的了解的同学去看。而对于我这种设计模式小白来说,我就需要一本理论和实践相结合的书,能让我快速入门设计模式,并且能让我把这些设计模式应用到项目开发中。

在网上查阅资料后,我发现《JavaScript设计模式与开发实践》这本书比较符合我的要求,这本书既有理论介绍,又有实践案例,而且案例都是基于javascript的,非常适合我这种javascript开发者。于是,我就入手了这本《JavaScript设计模式与开发实践》。

设计模式

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式是一名合格软件工程师必备的技能。

发布订阅模式

发布订阅模式是一种设计模式,它允许对象之间进行一对多的通信,而无需它们之间建立直接的耦合。在发布订阅模式中,有一个发布者对象,它负责发布消息,而有多个订阅者对象,它们负责接收消息。发布者和订阅者之间通过一个消息总线进行通信,消息总线负责将发布者发布的消息传递给订阅者。

发布订阅模式的主要优点是,它可以实现系统组件之间的解耦,让系统更灵活、更易于维护。例如,在一个聊天系统中,我们可以使用发布订阅模式来实现用户之间的通信。当一个用户发送消息时,他只需要将消息发布到消息总线上,而无需关心其他用户是否在线。当其他用户上线时,他们只需要订阅消息总线,就可以接收到其他用户发送的消息。

发布订阅模式的实现

在javascript中,我们可以使用事件来实现发布订阅模式。事件是一种特殊的对象,它可以被触发,当事件被触发时,它会通知所有的监听者。我们可以使用addEventListener()方法来为事件添加监听者,当事件被触发时,监听者就会被调用。

以下是发布订阅模式在javascript中的一个简单示例:

// 创建一个发布者对象
var publisher = new Publisher();

// 创建两个订阅者对象
var subscriber1 = new Subscriber();
var subscriber2 = new Subscriber();

// 为发布者对象添加一个监听者
publisher.addEventListener('message', subscriber1.onMessage);

// 为发布者对象添加另一个监听者
publisher.addEventListener('message', subscriber2.onMessage);

// 发布者对象发布一个消息
publisher.publish('Hello world!');

在这个示例中,发布者对象是一个名为Publisher的类,它具有一个名为publish()的方法,用于发布消息。订阅者对象是两个名为Subscriber的类,它们都具有一个名为onMessage()的方法,用于接收消息。当发布者对象调用publish()方法时,它会触发一个名为message的事件,这个事件会被所有监听者接收到。在示例中,subscriber1和subscriber2都是发布者对象的监听者,因此当发布者对象发布消息时,subscriber1和subscriber2都会收到消息。

总结

发布订阅模式是一种非常有用的设计模式,它可以实现系统组件之间的解耦,让系统更灵活、更易于维护。在javascript中,我们可以使用事件来实现发布订阅模式。发布订阅模式在javascript中有广泛的应用,例如,聊天系统、消息队列、事件驱动编程等。