1. 程式人生 > >【JS設計模式】單例模式

【JS設計模式】單例模式

單例模式就如其名一樣,一個建構函式在構造出一個物件後,之後再使用這個建構函式構造物件時,不會是新的物件,依舊是上一次的物件,通俗點說,單例模式實現的是一個建構函式只能創造一個新的物件。很不解,為什麼要這麼做?這個就像什麼呢,舉個不恰當的例子,就像一家汽車製造廠,在製造完一輛車之後,宣佈不再造新車了,之後公司要改型,改成只針對這輛車做維護(維修)的公司。

那麼這麼做的意義何在呢?橫看豎看都感覺不划算... ...說實話,我也不知道啥用,教科書式的解釋,大致就是說:

  • 建立完之後,只有一個例項,之後再怎麼建立,都是這一個,方便例項管理,提供了對例項的受控訪問。
  • 對於頻繁建立,銷燬物件,這個單例模式實現了物件統一,記憶體只佔有一個物件記憶體分量,在頻繁建立中,大大的節約了系統記憶體。

 從字面上看真的沒感覺出能用在什麼地方。不過換個角度想想,存在即合理,你想想,你寫程式碼的時候,建立完一個物件後,之後又不小心多建立了功能大體一模一樣的物件?(不會)好吧,那你想想,你寫完一大串的程式碼給別人維護或者二次開發時,那個第三者會不會建立一個跟你那個功能大體一模一樣的物件?(關我屁事,我的任務完成就行了)... ....怎麼都像是強加解釋啊,或許還有更高深的用法吧,我這種平庸之輩不能理解,我尊重每一個想法,在某些情況下,單例確實能保護程式碼和增加程式碼可維護性。不過對於我來說,它只是我用來練手的工具,接下來我們嘗試實現一個單例模式吧。

function Singledog(){  //建立了一個單身狗建構函式,然而全世界,只有我是單生狗
    var me = {name:"David", age:20}  //稍微介紹一下自己的身世
    Singledog = function () {   //建立完之後,直接把這個建構函式悄悄的重寫了,利用閉包原理,偷偷的讓全世界的單身狗變成我一個
        return me;
    }
    return me;
}

啥,你對我的程式碼不滿意?= =我只是按照單例模式的定義寫了一個,不能當真,僅供參考,ok?方法那麼多,我尊重每個人的想法。

總結一下,單例模式的實現其實沒什麼難度,應用場景在我日常開發中(學生黨,談啥開發,學習去吧),還真不覺得有啥用。模式建議大家根據實際場景使用,而不是盲目跟風亂用,這樣只會帶來負效應。