在 JavaScript ES6+ 中實作單例模式:逐步指南

王林
發布: 2023-08-30 18:33:02
原創
1195 人瀏覽過

在 JavaScript ES6+ 中实现单例模式:分步指南

在這篇文章中,我將向您展示如何在 JavaScript 中實作單例模式。

如果您是全端 JavaScript 開發人員,您就會知道 JavaScript 是一種強大的語言,您可以使用它來建立令人驚嘆的網站。另一方面,如果您僅使用 JavaScript 進行前端表單驗證和 AJAX 調用,那麼您只觸及了它的表面,它的功能遠不止於此。由於它是一種功能豐富的語言,因此有許多框架是建構在它之上。

在本文中,我們將討論物件導向 JavaScript 的一個有用的程式模式:單例模式。單例物件在應用程式運行時在全域範圍內僅建立一次。它們用於共享資源或在應用程式的不同部分之間進行協調。

什麼是單例模式?

讓我們來看看單例模式的定義:

在軟體工程中,單例模式是一種軟體設計模式,它將類別的實例化限制為一個「單一」實例。當只需要一個物件來協調整個系統的操作時,這非常有用。

當您開發應用程式時,有時需要跨應用程式建立全域物件。具體來說,您需要在整個請求的生命週期內僅實例化一次的物件。例如,它可能是您希望在整個請求中保持全域的資料庫連接對象,因為不需要為每個請求建立多個資料庫對象。在這種情況下,單例模式非常有用,因為它保證只會實例化物件的單一副本。

快速瀏覽:舊版 JavaScript 中的單例模式

在本節中,我們將快速了解如何在舊版的 JavaScript 中實作單例模式。

讓我們來看看下面的例子。

在上面的範例中,我們將Singleton物件實作為閉包,因此它將立即被呼叫。它實作了getInstance方法,我們可以呼叫該方法來實例化一個物件。在getInstance方法中,我們檢查instance屬性是否已經擁有我們正在尋找的對象,如果存在,我們不會建立另一個物件。如果它不包含任何對象,我們將呼叫createInstance方法來實例化一個新對象,然後返回它。透過這種方式,它可以確保每當您嘗試實例化新物件時只會建立物件的單一副本。

為了示範它,我們呼叫Singleton.getInstance()方法兩次來檢查它是否確實建立了兩個不同的物件。在控制台中,您應該能夠看到兩個物件是相同的,並且它們都列印相同的日期和時間。

這就是在舊版的 JavaScript 中實作單例模式的方法。在下一節中,我們將了解如何在 JavaScript ES6 版本中實現它。

ES6 中的單例模式

在本節中,我們將了解如何在 JavaScript ES6 版本中實作單例模式。當談到 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 類別

在本節中,我們將了解如何使用 ES6 類別來實作單例模式。

讓我們來看看下面的例子。

如您所見,我們已經實作了DBConnection類,我們可以使用它來跨應用程式實例化資料庫連接物件。

為了測試這一點,我們透過呼叫DBConnection類別的getInstance方法實例化了兩個物件。然後,我們比較兩個對象,看看它們是否相同。由於我們使用的是單例模式,因此它們應該是相同的,並且console.log語句將列印true來確認。您可以將其稱為惰性單例對象,因為對象僅在需要時創建,而不是在初始加載期間創建。

這就是如何定義一個實作單例模式的類別。

带有模块的 ES6 类

在本节中,我们将了解如何使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!