摘要:單例模式總結什么是單例模式單例模式的定義是一個類僅有一個實例,并且可以在全局訪問。這符合了單例模式的核心確保實例只有一個。創(chuàng)建一個新的單例使用管理原文鏈接設計模式單例模式
javascript單例模式總結
1.什么是單例模式?
單例模式的定義是:一個類僅有一個實例,并且可以在全局訪問。
在日常開發(fā)中,單例模式的使用十分廣泛。例如開發(fā)登錄浮窗,我們無論點擊登錄按鈕多少次,浮窗都只會創(chuàng)建一次。
這時,浮窗就很適合使用單例模式來創(chuàng)建。
2.實現(xiàn)單例模式
var CreatePopbox = function(html){ this.html = html; this._init(); }; CreatePopbox.prototype._init = function(){ this.div = document.createElement("div"); this.div.innerHTML = this.html; this.div.style.display = "none"; document.body.appendChild(this.div); }; CreatePopbox.prototype.show = function(){ this.div.style.display = "block"; }; CreatePopbox.prototype.hide = function(){ this.div.style.display = "none"; }; //通過代理函數(shù)達到單例模式的效果 var proxysingleCreatePopbox = (function(){ var instance; return function(html){ if(!instance){ instance = new CreatePopbox(html); } return instance; } })(); //創(chuàng)建CreatePopbox: var a = new proxysingleCreatePopbox("this is a"); var b = new proxysingleCreatePopbox("this is b"); console.log(a === b); //true
可以看到,a和b都指向了同一個實例,執(zhí)行new proxysingleCreatePopbox("this is b") 時,并不會重新生成一個新的CreatePopbox。
這符合了單例模式的核心:確保實例只有一個。
通過以上例子,我們已經(jīng)了解單例模式的實現(xiàn)方式,但還有一些缺陷:
創(chuàng)建對象和單例管理的邏輯都合在proxysingleCreatePopbox里邊,當需要創(chuàng)建其他單例時,只能把proxysingleCreatePopbox拷貝一次。
因此,我們需要把代碼再改造一下,把不變的部分隔離出來。
// var getSingle = function(fn){ var singleObj; return function(obj){ if(!singleObj){ singleObj = new fn(obj); } return singleObj; } } var CreatePopbox = function(opation){ this.html = opation.html; this._init(); }; CreatePopbox.prototype._init = function(){ this.div = document.createElement("div"); this.div.innerHTML = this.html; document.body.appendChild(this.div); }; var singlePopbox = getSingle(CreatePopbox); var a = new singlePopbox({html:"this is a"}); //創(chuàng)建一個新的單例 var CreateTipbox = function(opation){ this.div = document.createElement("div"); this.div.style.color = opation.color; this.div.innerHTML = opation.html; document.body.appendChild(this.div); } //使用getSingle管理 var singleTipbox = getSingle(CreateTipbox); var b = new singleTipbox({html:"this is b",color:"#f00"});
原文鏈接:javascript設計模式--單例模式
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83802.html
摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱為模塊設計模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對象文字費賠給變量。 JavaScript設計模式-第一部分:單例模式、組合模式和外觀模式 設計模式是一些可靠的編程方式,有助于保證代碼更加易于維護、擴展及分離,所有設計模式在創(chuàng)建大型JavaScript應用程序時均不可或缺 單...
摘要:此時我們創(chuàng)建的對象內(nèi)保存靜態(tài)變量通過取值器訪問,最后將這個對象作為一個單例放在全局空間里面作為靜態(tài)變量單例對象供他人使用。 單例模式 又被稱為單體模式,是只允許實例化一次的對象類。有時我們也用一個對象來規(guī)劃一個命名空間,井井有條的管理對象上面的屬性和方法。 傳統(tǒng)的面向對象語言中單例模式的實現(xiàn),均是單例對象從類中創(chuàng)建而來,在以類為中心的語言中,這是很常見的做法。如果需要某個對象,就必須先...
摘要:不符合設計模式中的單一職責的概念。引入代理實現(xiàn)單例模式引入代理實現(xiàn)單例模式的特點我們負責管理單例的邏輯移到了代理類中。的單例模式對比在以上的代碼中實現(xiàn)的單例模式都混入了傳統(tǒng)面向對象語言的特點。 聲明:這個系列為閱讀《JavaScript設計模式與開發(fā)實踐》 ----曾探@著一書的讀書筆記 1.單例模式的特點和定義 保證一個類僅有一個實例,并且提供一個訪問它的全局訪問點。 2.傳統(tǒng)面向對...
摘要:停更許久,近期計劃更新設計模式系列。單例模式是創(chuàng)建型設計模式的一種。雖然它不是正規(guī)的單例模式,但不可否認確實具備類單例模式的特點。適用場景單例模式的特點,意圖解決維護一個全局實例對象。 停更許久,近期計劃更新:設計模式系列。 showImg(https://segmentfault.com/img/bVbt7uw?w=800&h=600); 單例模式:限制類實例化次數(shù)只能一次,一個類只...
摘要:觀察構造函數(shù)的代碼,該構造函數(shù)實際上負責了兩件事情第一是創(chuàng)建對象和執(zhí)行初始化方法,第二是保證只有一個對象。惰性單例在實際開發(fā)中非常有用,是單例模式的重點。 單例模式 單例模式的定義是: 保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 單例模式是一種常用的模式,有一些對象我們往往只需要一個,比如線程池、全局緩存、瀏覽器的window對象等。例如,當我們點擊登錄按鈕時,頁面會彈出一...
摘要:在面向對象的語言中,比如,等,單例模式通常是定義類時將構造函數(shù)設為,保證對象不能在外部被出來,同時給類定義一個靜態(tài)的方法,用來獲取或者創(chuàng)建這個唯一的實例。 萬事開頭難,作為正經(jīng)歷菜鳥賽季的前端player,已經(jīng)忘記第一次告訴自己要寫一些東西出來是多久以的事情了。。。如果,你也和我一樣,那就像我一樣,從現(xiàn)在開始,從看到這篇文章開始,打開電腦,敲下你的第一篇文章(或者任何形式的文字)吧。 ...
閱讀 3172·2021-09-22 15:05
閱讀 2748·2019-08-30 15:56
閱讀 1054·2019-08-29 17:09
閱讀 792·2019-08-29 15:12
閱讀 2076·2019-08-26 11:55
閱讀 3038·2019-08-26 11:52
閱讀 3370·2019-08-26 10:29
閱讀 1374·2019-08-23 17:19