基于JavaScript實現(xiàn)單例模式
首先,了解一下什么是單例模式,這里我直接把菜鳥教程中的定義給copy過來:
單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
這種模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。
注意:
1、單例類只能有一個實例。
2、單例類必須自己創(chuàng)建自己的唯一實例。
3、單例類必須給所有其他對象提供這一實例。
用一句話來總結(jié)就是:在單例模式中,一個類僅有一個實例,并提供一個訪問它的全局訪問點。這無非是用一個變量來標(biāo)志當(dāng)前是否已經(jīng)為某個類創(chuàng)建過對象,如果是,則在下一次獲取該類的實例時,直接返回之前創(chuàng)建的對象,在JavaScript我們很自然而然就會想到用閉包來解決這個問題。
比如說需要生成一個頁面登錄框,因為有且只可能有一個登錄框,那么你就可以用單例的思想去實現(xiàn)他,代碼如下:
let createLoginWindow = function(title) {
this.title= title;
this.init();
}
createLoginWindow.prototype.init = function() {
// some code
}
let proxySingleton = (function() {
var instance;
return function(title) {
if (!instance) {
instance = new createLoginWindow(title);
}
return instance;
}
})();
let windowA = new proxySingleton('login1');
let windowB = new proxySingleton('login2');
console.log(windowA === windowB); // true
可以看到,上述代碼中createLoginWindow負(fù)責(zé)構(gòu)造對象,然后通過代理proxySingleton來判斷是構(gòu)造新的對象還是返回已有對象。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jquery結(jié)合CSS使用validate實現(xiàn)漂亮的驗證
這篇文章主要介紹了jquery結(jié)合CSS使用validate實現(xiàn)漂亮的驗證,需要的朋友可以參考下2015-01-01
淺析document.createDocumentFragment()與js效率
對于循環(huán)批量操作頁面的DOM有很大幫助!利用文檔碎片處理,然后一次性append,并且使用原生的javascript語句操作2013-07-07
JavaScript驗證18位身份證號碼最后一位正確性的實現(xiàn)代碼
這篇文章主要介紹了JavaScript驗證18位身份證號碼最后一位正確性的實現(xiàn)代碼,小編親測有效,需要的朋友可以參考下2014-08-08

