什么是單例 單例模式是非常常用的一種設(shè)計模式,雖然你可能都不知道你在使用,,單例模式中 對象類需要保證只有一個實例存在,。單例就是保證一個類只有一個實例,實現(xiàn)的方法一般是先判斷實例存在與否,,如果存在直接返回,,如果不存在就創(chuàng)建了再返回,以確保了一個類只有一個實例對象,。 舉個例子,,就像每個人都只能有一個身份證,你沒有身份證可以辦理一個,但如果有了再想辦理多一個身份證,,那么對不起,,不可能,這種情況就叫單例,。
實現(xiàn)單例模式的方式有很多,,比如使用對象字面量的方式是最常用的創(chuàng)建方式:
但這種方式并不能夠被實例化,僅能使用一次,。并且所有的屬性和方法都暴漏在外面,,很容易造成命名空間的污染,所以說并不那么的優(yōu)雅,。 那么我們開始對上面的代碼進(jìn)行一次優(yōu)化,,讓它只暴漏我們想暴漏的方法和屬性。
我們在上面的函數(shù)中創(chuàng)建了私有方法和變量,只暴漏了我們希望暴漏的變量和方法,,是不是優(yōu)雅了很多,,但是讓我們再回顧一下單例模式的概念和實現(xiàn)方式: 單例就是保證一個類只有一個實例,實現(xiàn)的方法一般是先判斷實例存在與否,,如果存在直接返回,,如果不存在就創(chuàng)建了再返回,以確保了一個類只有一個實例對象,。 顯然上面的代碼還不滿足單例模式的條件不是嗎,?還記得身份證的例子嗎?我們再回顧一遍,。
下面的代碼也是這樣的邏輯
因為我們只實例化了一次所以當(dāng)你改變參數(shù)的時候因為沒有被統(tǒng)招實例化所以輸出的結(jié)果還是第一次實例化的時候的結(jié)果。這就是單例模式了,。
有了ES6以后我們的代碼就可以寫的更加的優(yōu)雅
首先我們創(chuàng)建了一個類,初始化的時候標(biāo)記改類是否初始化過,,然后使用static創(chuàng)建了一個靜態(tài)類,,也就是說只能被類直接調(diào)用,實例化以后就不可以在調(diào)用getInstance方法,。 然后你看到了 結(jié)果和上面的一樣都只會打印出第一次被實例化的參數(shù),。
vue3.0馬上就要來了,,雖然他還可以使用es6來進(jìn)行開發(fā),但源碼卻是使用TypeScript進(jìn)行編寫的,,可見大神們是多么的喜歡TypeScript,,所以如果不下手可就晚了,那么我們看下用TypeScript來實現(xiàn)單例模式如何編寫,,和es6有多大的區(qū)別,。
與JavaScript相比Typescript 的語法更加的嚴(yán)謹(jǐn),,更便于學(xué)習(xí)和理解。 在上的代碼中我們同樣創(chuàng)建了一個類,,在進(jìn)行變量聲明的是,,TypeScript聲明了私有靜態(tài)變量同時限制了他的類型。其他寫法與es6相差不大,。 |
|
來自: 新用戶26922hFh > 《待分類》