理解JavaScript設計模式中的單例模式
單例模式(Singleton Pattern
)是最簡單的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
單例模式涉及到一個單一的類,該類負責創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。
- 1、單例類只能有一個實例。
- 2、單例類必須自己創(chuàng)建自己的唯一實例。
- 3、單例類必須給所有其他對象提供這一實例。
這樣做的缺點就是:沒有接口,不能繼承,與單一職責原則沖突,一個類應該只關心內部邏輯,而不關心外面怎么樣來實例化。
優(yōu)點則有:
- 1、在內存里只有一個實例,減少了內存的開銷,尤其是頻繁的創(chuàng)建和銷毀實例。
- 2、避免對資源的多重占用。
最簡單的單例模式舉例:
// 定義一個類 function Singleton(name) { this.name = name; this.instance = null; } // 原型擴展類的一個方法getName() Singleton.prototype.getName = function() { console.log(this.name) }; // 獲取類的實例 Singleton.getInstance = function(name) { if(!this.instance) { this.instance = new Singleton(name); console.log(this.instance) // {name: 'a', instance: null} } return this.instance }; // 獲取對象1 var a = Singleton.getInstance('a'); // 獲取對象2 var b = Singleton.getInstance('b'); // 進行比較 console.log(a === b); // true
不過,這樣寫,不夠直觀,因為我們通常都是通過 new 來創(chuàng)建實例的;
所以,改寫為:
// 單例構造函數(shù) function CreateSingleton (name) { this.name = name; this.getName(); }; // 獲取實例的名字 CreateSingleton.prototype.getName = function() { console.log(this.name) }; // 單例對象 var Singleton = (function(){ var instance; return function (name) { if(!instance) { instance = new CreateSingleton(name); } return instance; } })(); // 創(chuàng)建實例對象1 var a = new Singleton('a'); // 創(chuàng)建實例對象2 var b = new Singleton('b'); console.log(a===b);
到此這篇關于理解JavaScript設計模式中的單例模式的文章就介紹到這了,更多相關JS單例模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
javascript對象的property和prototype是這樣一種關系
javascript對象的property和prototype是這樣一種關系...2007-03-03淺談javascript中的instanceof和typeof
這篇文章主要簡單介紹了javascript中的instanceof和typeof的相關資料,需要的朋友可以參考下2015-02-02JS獲取url參數(shù),JS發(fā)送json格式的POST請求方法
下面小編就為大家分享一篇JS獲取url參數(shù),JS發(fā)送json格式的POST請求方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03js substring從右邊獲取指定長度字符串(示例代碼)
本篇文章主要是對js substring從右邊獲取指定長度字符串的示例代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12