JS設計模式之單例模式

2022-09-12 08:57:10 字數 2301 閱讀 5593

單例模式的定義是:保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。比如說購物車,在乙個**中,我們只需要乙個購物車,購物車在整個**中是唯一的,不需要多次建立,即使多次點選購物車按鈕,也不會生成多個購物車。

閉包預警:有對閉包不明白的同學,可以看這裡。

var singleton = function(name) 

singleton.getinstance = (function ()

return instance;

}})()

var single1 = singleton.getinstance('張三');

var single2 = singleton.getinstance('李四');

console.log(single1 === single2); // 輸出true

我們主要看一下singleton.getinstance方法,其中將變數instance作為乙個標誌,來確認是否建立過singleton物件。如果沒有就建立乙個singleton物件,反之則返回之前建立過的物件。

這樣我們建立singleton物件的時候,就得使用singleton.getinstance方法,而不是使用new關鍵字來建立物件。如果想使用new關鍵字的話,可以這樣寫。

var singleton = function(name) 

var proxysingleton = (function ()

return instance;

}})()

var single1 = new proxysingleton('張三');

var single2 = new proxysingleton('李四');

console.log(single1 === single2); // 輸出true

我們將管理單例的邏輯放入proxysingleton這個**類中,從而使singleton變成乙個普通的類或者建構函式。這樣我們就可以通過new關鍵字來建立物件。

var createobj = function(name, age) 

}var getsingle = function(fn)

}var createfn = getsingle(createobj);

var obj1 = createfn('張三', 18);

var obj2 = createfn('李四', 19);

console.log(obj1 === obj2); // 輸出true

這裡createobj方法負責建立物件和處理內部邏輯,getsingle方法只負責管理單例的邏輯。這樣在建立各種單例物件的情況下,使用更加靈活。也符合單一職責的開發原則。

單例模式的使用場景非常廣泛,這裡舉幾個

JS設計模式之單例模式

保證乙個類僅有乙個例項,並且提供乙個訪問它的全域性訪問點。如果例項不存在,則生成乙個例項,如果例項存在,則返回這個例項 var singleton function return return instance console.log singleton.getinstance foo consol...

JS設計模式之單例模式

在了解單例模式之前,我們要先搞懂什麼是設計模式 比較官方的設計模式定義 就是在物件導向軟體設計過程中針對特定問題的簡潔而優雅的解決方案。當然說白了就是 設計模式對某個特定場景下對某種問題的解決方案。所以,我們在合適的場景下可能會條件反射一樣自然而然想到符合這種場景的設計模式。所有的設計模式的共同目標...

JS設計模式之 單例模式

設計模式,常見的模式有單例模式,模式等,設計模式的合理運用不僅使 結構更加清晰,也便於後期的維護與重構。然而在日常的學習中,我們卻在不經意間使用了單例模式,but總是容易忽視,額。應該是我,不是我們。什麼是單例模式?限制乙個類僅有乙個例項化物件,並提供乙個訪問它的全域性訪問點。經典的實現方式是 建立...