JS pattern之Singleton pattern

所謂singleton pattern,就是指程序中任何時(shí)候只存該object的一個(gè)instance。 如果每次創(chuàng)建一個(gè)新的instance只為了使用同樣的功能,就該考慮采用singleton pattern了。比如數(shù)據(jù)庫連接處理,或是前端的ajax請(qǐng)求等每次都一樣的對(duì)象,采用Singleton模式不僅使代碼簡潔清晰,也減少了創(chuàng)建對(duì)象的開銷。

一個(gè)具體的例子:

var obj1 = new Singleton();
var obj2 = new Singleton();
obj1 === obj2; // true
obj1.test = 1;
obj2.test; // => 1

obj1和obj2分別新建了一個(gè)Singleton的對(duì)象實(shí)例,但實(shí)際上他們指向的是同一個(gè)對(duì)象實(shí)例。也說明了無論何時(shí),系統(tǒng)中只會(huì)存在Singleton對(duì)象的一個(gè)實(shí)例。

實(shí)現(xiàn)Singleton的方式非常多,最簡單的如不采用constructor的話,object literal也算是Singleton。下面這種方式是我認(rèn)為比較優(yōu)秀的實(shí)現(xiàn),不僅簡潔可讀,也適用于strict模式。

var Singleton = function(){
  
  if (Singleton.prototype._singletonInstance) {
    return Singleton.prototype._singletonInstance;
  }
  
  Singleton.prototype._singletonInstance = this;  // first instance obect
  
  this.test = 1;
  
};

這里的要點(diǎn)是在prototype上加上一個(gè)共享屬性,指向第一個(gè)調(diào)用constructor的instance。以后再調(diào)用constructor的時(shí)候,就不再生成新的實(shí)例,而是返回先前創(chuàng)建的實(shí)例了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容