在这篇文章中,我将向您展示如何在 JavaScript 中实现单例模式。
如果您是一名全栈 JavaScript 开发人员,您就会知道 JavaScript 是一种功能强大的语言,您可以使用它来构建令人惊叹的网站。另一方面,如果您仅使用 JavaScript 进行前端表单验证和 AJAX 调用,那么您只触及了它的表面,它的功能远不止于此。由于它是一种功能丰富的语言,因此有很多框架构建在它之上。
在本文中,我们将讨论面向对象 JavaScript 的一种有用的编程模式:单例模式。单例对象在应用程序运行时在全局范围内仅创建一次。它们用于共享资源或在应用程序的不同部分之间进行协调。
让我们看一下单例模式的定义:
在软件工程中,单例模式是一种软件设计模式,它将类的实例化限制为一个“单个”实例。当只需要一个对象来协调整个系统的操作时,这非常有用。
当您开发应用程序时,有时需要跨应用程序创建全局对象。具体来说,您需要在整个请求的生命周期内仅实例化一次的对象。例如,它可能是您希望在整个请求中保持全局的数据库连接对象,因为不需要为每个请求创建多个数据库对象。在这种情况下,单例模式非常有用,因为它保证只会实例化对象的单个副本。
在本节中,我们将快速了解如何在旧版本的 JavaScript 中实现单例模式。
让我们看一下下面的例子。
在上面的示例中,我们将 Singleton
对象实现为闭包,因此它将立即被调用。它实现了 getInstance
方法,我们可以调用该方法来实例化一个对象。在 getInstance
方法中,我们检查 instance
属性是否已经拥有我们正在查找的对象,如果存在,我们不会创建另一个对象。如果它不包含任何对象,我们将调用 createInstance
方法来实例化一个新对象,然后返回它。通过这种方式,它可以确保每当您尝试实例化新对象时只会创建对象的单个副本。
为了演示它,我们调用 Singleton.getInstance()
方法两次来检查它是否确实创建了两个不同的对象。在控制台中,您应该能够看到两个对象是相同的,并且它们都打印相同的日期和时间。
这就是在旧版本的 JavaScript 中实现单例模式的方法。在下一节中,我们将了解如何在 JavaScript ES6+ 版本中实现它。
在本节中,我们将了解如何在 JavaScript ES6+ 版本中实现单例模式。当谈到 ES6 方式时,您可以使用几种不同的方法来实现单例模式。
如果您使用过 ES6 模块,并且您还不知道,ES6 模块默认情况下是单例的。具体来说,通过组合模块和 const
关键字,您可以轻松编写单例。
让我们看一下下面的ES6模块代码。
const currentDateAndTime = new Object("I am instantiated at:" + new Date().toLocaleString()); export default currentDateAndTime;
所以现在,每当您导入上述 ES6 模块时,都保证获得相同版本的 currentDateAndTime
对象。由于 currentDateAndTime
对象的作用域为模块,因此每次在其他文件中包含上述 ES6 模块时,都保证您会得到相同的对象。
在本节中,我们将了解如何使用 ES6 类来实现单例模式。
让我们看一下下面的例子。
如您所见,我们已经实现了 DBConnection
类,我们可以使用它来跨应用程序实例化数据库连接对象。
为了测试这一点,我们通过调用 DBConnection
类的 getInstance
方法实例化了两个对象。然后,我们比较两个对象,看看它们是否相同。由于我们使用的是单例模式,因此它们应该是相同的,并且 console.log
语句将打印 true
类的 getInstance
方法实例化了两个对象。然后,我们比较两个对象,看看它们是否相同。由于我们使用的是单例模式,因此它们应该是相同的,并且 console.log
语句将打印 true
来确认。您可以将其称为惰性单例对象,因为对象仅在需要时创建,而不是在初始加载期间创建。
这就是如何定义一个实现单例模式的类。
在本节中,我们将了解如何使用 ES6 类和模块来实现单例模式。
让我们看一下下面的例子。
constructor(conString) {} static getInstance(conString) { if (!this.instance) { this.instance = new DBConnection(conString); } return this.instance; } } const dbConObj = DBConnection.getInstance('mysqldb1'); export default dbConObj;
创建作用域为模块的类的实例是实现单例模式的最佳方法。因此,如果您正在使用 ES6 模块,这是使用 ES6 类实现单例模式的推荐方法。
这就是如何使用 ES6 类和模块实现单例模式。
今天,我们讨论了 JavaScript 中的单例模式。除了基础知识之外,我们还通过几个示例来了解它如何与不同版本的 JavaScript 配合使用。
以上是在 JavaScript ES6+ 中实现单例模式:分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!