在這篇文章中,我將向您展示如何在 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
來確認。您可以將其稱為惰性單例對象,因為對象僅在需要時創建,而不是在初始加載期間創建。
這就是如何定義一個實作單例模式的類別。
在本节中,我们将了解如何使用 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中文網其他相關文章!