初入js坑時,滿臉懵逼的我認爲設計模式就該是後端頭疼的,對,頭疼,蓋因粗略掃描下來也就十幾二十種吧,彼時很有種隔岸觀火看到你過得很差我也就安心的自得。染鵝,打臉啪啪的,實不該忘記javascript前可不是白綴個java的,怎麼能不趟一下設計模式這「渾水」。
--以上,吐槽完畢javascript
設計模式主要分爲三大類:建立型模式、結構型模式、行爲模式。本篇只涉及建立型模式,表問我爲何,由於其餘兩種我也不瞭解,淚目。java
所謂建立型模式,是指基於建立對象的概念。單例模式、工廠模式、抽象工廠模式就屬於典型的建立型模式。後端
所謂單例模式,是指僅實例化該類一次,該實例提供一個衆所周知的全局訪問點。爲何要限制僅實例化一次呢?由於全局只須要一個poly啊。例如在封裝組件Alert的時候,只須要實例化一次,將該實例掛在全局對象下,這樣除了第一次調用的時候須要實例化,後續都是在確認已有Poly實例後,直接調用已有的惟一實例,只是須要傳入不一樣的提示語句做爲參數。設計模式
- 懶漢式this
// code 1 var poly = (function(){ var instance; var Poly = function(){ this.name = "Poly"; }; return { getInstance: function(){ if (!instance) { instance = new Poly(); console.log("init onece"); } return instance; } } })();
運行結果以下:spa
以上代碼,只打印了一次init onece
,除了第一次走進if (!instance)
條件語句中進行實例化,後續兩次並無實例化,而是直接返回Poly的實例。設計
- 餓漢式code
你應該看出來了,以上代碼是在調用poly對象的getInstance方法時才進行實例化,還有一種情形是poly對象得到的直接是Poly類的一個實例,以下:對象
// code 2 var poly = (function(){ var instance; var Poly = function(){ this.name = "Poly"; }; if (!instance) { instance = new Poly(); console.log("init onece"); } return instance; })();
運行結果以下:blog
code 1 和 code 2所展現的是單例模式的兩種使用方式:懶漢式和餓漢式(這名字略粗獷的趕腳?蜜汁微笑?)。懶漢式即延遲到使用時才實例化,餓漢式即一開始加載類時就實例化。前者省空間,後者省時間,按需食用,oh不,按需使用。
單例模式暫時這麼些,若是後續瞭解更多會默默補充上來,下一次會分享工廠模式。話說,貌似說了不少「下一次」這類話?難怪懂得這麼多道理還減很差這場肥。