在 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