在 JavaScript 中实现单体类
在今天的文章中,我们将学习如何使用最简单的方式在 JavaScript 中实现单例类。
JavaScript 中的单例实现
在 Java 等编程语言中,一个对象可以有多个实例。但是当我们只想限制一个对象的单个实例时,就会出现单例模式。
此模式将特定对象的实例数限制为在任何给定时间点只有一个。这个单一实例的名称是一个单例。
当从中央位置协调系统级操作时,此概念很有用。最好的例子之一是数据库连接池。
数据库连接对任何应用程序都很重要,池管理整个应用程序的所有数据库连接的创建、销毁和持续时间,确保没有连接丢失。
让我们举个例子。
const SingletonFunction = (function() {
let instance;
function createInstance() {
return new Object('Instance of SingletonFunction');
}
return {
getInstance: function() {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
function TestSingletonFunction() {
const instance1 = SingletonFunction.getInstance();
const instance2 = SingletonFunction.getInstance();
console.log('Both instances are the same? ' + (instance1 === instance2));
}
TestSingletonFunction()
在上面的示例中,getInstance
方法充当 Singleton 看门人。它返回对象的唯一实例,同时维护对它的私有引用,外部世界无法访问。
getInstance
方法说明了另一种称为 Lazy Load
的设计模式。延迟加载检查是否已经创建了实例;否则,它将创建一个并将其存储以供将来参考。
所有后续调用都将收到存档的实例。延迟加载是一种节省内存和 CPU 的技术,它仅在必要时创建对象。
当你创建单例方法的两个实例时,这两个实例在数据类型和值方面是相同的。当你在任何浏览器中运行上述代码时,你会看到两个实例都是同一个实例。
输出:
"Both instances are the same? true"
JavaScript 中单例的优点
全局变量是 JavaScript 的重要组成部分,但单例减少了对全局变量的需求。当只需要一个实例时,其他几个模型,例如 Factory
、Prototype
和 Façade
,通常作为 Singleton 实现。
这个对象被实现为一个即时的、匿名的函数。该函数通过用括号括起来立即执行,然后再加上两个括号。
因为没有名字,所以叫匿名。
Singleton 是常见 JavaScript 模式的一种表现形式:Module.Module
模式是所有主要 JavaScript 库和框架(jQuery、Backbone、Ember 等)的基础。
Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.
LinkedIn