基于JavaScript實(shí)現(xiàn)單例模式
首先,了解一下什么是單例模式,這里我直接把菜鳥(niǎo)教程中的定義給copy過(guò)來(lái):
單例模式(Singleton Pattern)是 Java 中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。
這種模式涉及到一個(gè)單一的類(lèi),該類(lèi)負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類(lèi)提供了一種訪問(wèn)其唯一的對(duì)象的方式,可以直接訪問(wèn),不需要實(shí)例化該類(lèi)的對(duì)象。
注意:
1、單例類(lèi)只能有一個(gè)實(shí)例。
2、單例類(lèi)必須自己創(chuàng)建自己的唯一實(shí)例。
3、單例類(lèi)必須給所有其他對(duì)象提供這一實(shí)例。
用一句話來(lái)總結(jié)就是:在單例模式中,一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。這無(wú)非是用一個(gè)變量來(lái)標(biāo)志當(dāng)前是否已經(jīng)為某個(gè)類(lèi)創(chuàng)建過(guò)對(duì)象,如果是,則在下一次獲取該類(lèi)的實(shí)例時(shí),直接返回之前創(chuàng)建的對(duì)象,在JavaScript我們很自然而然就會(huì)想到用閉包來(lái)解決這個(gè)問(wèn)題。
比如說(shuō)需要生成一個(gè)頁(yè)面登錄框,因?yàn)橛星抑豢赡苡幸粋€(gè)登錄框,那么你就可以用單例的思想去實(shí)現(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)造對(duì)象,然后通過(guò)代理proxySingleton來(lái)判斷是構(gòu)造新的對(duì)象還是返回已有對(duì)象。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jquery結(jié)合CSS使用validate實(shí)現(xiàn)漂亮的驗(yàn)證
這篇文章主要介紹了jquery結(jié)合CSS使用validate實(shí)現(xiàn)漂亮的驗(yàn)證,需要的朋友可以參考下2015-01-01javascript 模塊依賴(lài)管理的本質(zhì)深入詳解
這篇文章主要介紹了javascript 模塊依賴(lài)管理,結(jié)合實(shí)例形式深入分析了javascript 模塊依賴(lài)管理具體定義、實(shí)現(xiàn)方法及注意事項(xiàng),需要的朋友可以參考下2020-04-04使用javascript為網(wǎng)頁(yè)增加夜間模式
如何給Web頁(yè)面增加夜間模式功能? 其實(shí)所謂的夜間模式就是在頁(yè)面上增加一個(gè)透明的遮罩層,但是遮罩層會(huì)擋住頁(yè)面元素, 解決方法是 添加DIV,給DIV的outline屬性一個(gè)很大的outline-width值,用outline的邊框作為遮罩,這樣既能正常點(diǎn)擊頁(yè)面元素,又能達(dá)到夜間模式的效果2014-01-01淺析document.createDocumentFragment()與js效率
對(duì)于循環(huán)批量操作頁(yè)面的DOM有很大幫助!利用文檔碎片處理,然后一次性append,并且使用原生的javascript語(yǔ)句操作2013-07-07JavaScript驗(yàn)證18位身份證號(hào)碼最后一位正確性的實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaScript驗(yàn)證18位身份證號(hào)碼最后一位正確性的實(shí)現(xiàn)代碼,小編親測(cè)有效,需要的朋友可以參考下2014-08-08