通俗的講單例模式就是不容許經過 const instent = new Demo()
的形式來屢次實例化一個類,因此咱們首先會有以下的代碼函數
原理:咱們能夠看到實例化的時候 new Person()下面飄紅了,解釋是不容許實例化構造函數是私有類型的類,由於 private聲明後只能在類的內部使用。this
既然不能經過外部實例化這個類,那麼咱們只能經過內部來訪問,同時也要通知外部,因此咱們有了以下的代碼3d
原理:經過 static聲明咱們能夠經過類的自己來調用這個方法,經過這個方法再來實例化這個類,就達到了內部訪問私有構造函數的目的。code
或許看到這,你會不屑的說一句:繞來繞去有區別嗎?屢次調用這個靜態方法不仍是屢次實例化了這個類。。。(沒錯!的確是這樣)cdn
爲了解決上面提到的問題,咱們能夠用一個變量用來專門保存一個實例,當再次訪問的時候咱們直接返回這個變量是否是就能夠完美解決這個問題了?因此上代碼blog
原理: 咱們聲明一個私有變量instance(爲何又是靜態的呢?)來存儲咱們第一次實例化的結果,而後以後的每次訪問由於instance已是存在的了因此返回的結果都是同一個實例,因此是否是就達到了單例的效果呢?至於爲何又是靜態的呢?由於在static聲明中訪問的this都是類自己,咱們若是不寫static,那麼這個this是訪問不到實例屬性的。it
下面是一個關於ts public屬性的小技巧io
咱們一般的作法來給類的屬性賦值是 將參數傳入構造函數,而後在構造函數中在進行賦值,若是是TS還須要先聲明屬性。class
簡寫以下:變量
咱們能夠經過在參數的時候直接給定參數類型,他就等於上面的聲明再賦值
經過簡單的十幾行代碼能夠很清晰的理解到:
1. 單例模式就是隻能實例化一次,以後的每次其實都是訪問同一個實例;
2.private 聲明後只能在類內部訪問到;
3.static 聲明後只能經過類自己訪問到;
4.public 聲明類的屬性能夠在傳參時進行簡寫