基于JavaScript實(shí)現(xiàn)單例模式
首先,了解一下什么是單例模式,這里我直接把菜鳥教程中的定義給copy過來:
單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。
這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類提供了一種訪問其唯一的對(duì)象的方式,可以直接訪問,不需要實(shí)例化該類的對(duì)象。
注意:
1、單例類只能有一個(gè)實(shí)例。
2、單例類必須自己創(chuàng)建自己的唯一實(shí)例。
3、單例類必須給所有其他對(duì)象提供這一實(shí)例。
用一句話來總結(jié)就是:在單例模式中,一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。這無非是用一個(gè)變量來標(biāo)志當(dāng)前是否已經(jīng)為某個(gè)類創(chuàng)建過對(duì)象,如果是,則在下一次獲取該類的實(shí)例時(shí),直接返回之前創(chuàng)建的對(duì)象,在JavaScript我們很自然而然就會(huì)想到用閉包來解決這個(gè)問題。
比如說需要生成一個(gè)頁面登錄框,因?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ì)象,然后通過代理proxySingleton來判斷是構(gòu)造新的對(duì)象還是返回已有對(duì)象。
以上就是本文的全部內(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-01淺析document.createDocumentFragment()與js效率
對(duì)于循環(huán)批量操作頁面的DOM有很大幫助!利用文檔碎片處理,然后一次性append,并且使用原生的javascript語句操作2013-07-07JavaScript驗(yàn)證18位身份證號(hào)碼最后一位正確性的實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaScript驗(yàn)證18位身份證號(hào)碼最后一位正確性的實(shí)現(xiàn)代碼,小編親測(cè)有效,需要的朋友可以參考下2014-08-08