設(shè)計(jì)模式:?jiǎn)卫J?/h1>

單例模式

單例(Singleton)模式的作用讓某一個(gè)類始終只擁有一個(gè)實(shí)例藐守,即每次通過構(gòu)造函數(shù)構(gòu)造的對(duì)象始終是同一個(gè)赦政。

var Universe = function () {
  // ...
}

new Universe() === new Universe();

單例模式的實(shí)現(xiàn)

實(shí)例掛載構(gòu)造函數(shù)

var Universe = function () {
  // cache命中
  if (typeof Universe.instance === 'object') {
    return Universe.instance;
  }

  // main
  this.bang = "Big";

  // cahce
  Universe.instance = this;****
  return this;
}

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單
缺點(diǎn):在構(gòu)造函數(shù)上暴露了instance實(shí)例撬讽,容易被篡改

重寫構(gòu)造函數(shù)

var Universe = function () {
  // 緩存
  var instance = this;

  // main
  this.bang = "Big";

  // 重寫
  Universe = function () {
    return this;
  }
}

優(yōu)點(diǎn):沒有暴露任何變量
缺點(diǎn):

  1. 丟失掛載在原構(gòu)造函數(shù)和原構(gòu)造函數(shù)原型上的屬性
  2. 實(shí)例的構(gòu)造函數(shù)不等于現(xiàn)在的構(gòu)造函數(shù)

寫成代碼就是

var universe = new Universe();
Universe.prototype.everything = true;

console.log(universe.everything);  // undefined

universe.constructor === Universe; // false

這和我們預(yù)想的結(jié)果是不一致的铲觉;我們?nèi)匀幌M麊卫J降臉?gòu)造函數(shù)擁有一般構(gòu)造函數(shù)的效果窝稿;因此這個(gè)單例模式仍然要繼續(xù)優(yōu)化,這次優(yōu)化主要是放在原型問題上访忿。我們這么做:

var Universe = function () {
  // 緩存
  var instance;

  // 重寫
  Universe = function () {
    return instance;
  }

  // 補(bǔ)充原型
  Universe.prototype = this;
  // 構(gòu)造實(shí)例
  instance = new Universe();
  // 重置構(gòu)造函數(shù)
  instance.constructor = Universe;

  // main
  this.bang = "Big";

  return instance;
}

閉包

如果要全程維護(hù)唯一實(shí)例的生命周期瞧栗,那么采用閉包應(yīng)該才是最合適的方式。

var Universe = (function () {
  var instance;

  return function () {
    if (instance) {
      return instance;
    }

    instance = this;

    // main
    this.bang = "Big";
  }
})();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末海铆,一起剝皮案震驚了整個(gè)濱河市迹恐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卧斟,老刑警劉巖殴边,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唆涝,居然都是意外死亡找都,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門廊酣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來能耻,“玉大人,你說我怎么就攤上這事亡驰∠停” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵凡辱,是天一觀的道長(zhǎng)戒职。 經(jīng)常有香客問我,道長(zhǎng)透乾,這世上最難降的妖魔是什么洪燥? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮乳乌,結(jié)果婚禮上捧韵,老公的妹妹穿的比我還像新娘。我一直安慰自己汉操,他們只是感情好再来,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磷瘤,像睡著了一般芒篷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上采缚,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天针炉,我揣著相機(jī)與錄音,去河邊找鬼仰担。 笑死糊识,一個(gè)胖子當(dāng)著我的面吹牛绩社,可吹牛的內(nèi)容都是我干的摔蓝。 我是一名探鬼主播赂苗,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贮尉!你這毒婦竟也來了拌滋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猜谚,失蹤者是張志新(化名)和其女友劉穎败砂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魏铅,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昌犹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了览芳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斜姥。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沧竟,靈堂內(nèi)的尸體忽然破棺而出铸敏,到底是詐尸還是另有隱情,我是刑警寧澤悟泵,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布杈笔,位于F島的核電站,受9級(jí)特大地震影響糕非,放射性物質(zhì)發(fā)生泄漏蒙具。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一朽肥、第九天 我趴在偏房一處隱蔽的房頂上張望禁筏。 院中可真熱鬧,春花似錦鞠呈、人聲如沸融师。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)旱爆。三九已至,卻和暖如春窘茁,著一層夾襖步出監(jiān)牢的瞬間怀伦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工山林, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留房待,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桑孩,于是被迫代替她去往敵國(guó)和親拜鹤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容