摘要:原文博客地址單例模式系統(tǒng)中被唯一使用,一個類只有一個實例。中的單例模式利用閉包實現(xiàn)了私有變量兩者是否相等弱類型,沒有私有方法,使用者還是可以直接一個,也會有方法分割線不是單例最簡單的單例模式,就是對象。
原文博客地址:https://finget.github.io/2018/11/06/single/單例模式
系統(tǒng)中被唯一使用,一個類只有一個實例。實現(xiàn)方法一般是先判斷實例是否存在,如果存在就返回,不存在就創(chuàng)建再返回。
在JavaScript里,單例作為空間提供者,從全局命名空間里提供一個唯一的訪問點來訪問該對象。
模式作用:
模塊間通信
系統(tǒng)中某個類的對象只能存在一個
保護自己的屬性和方法
注意事項:
注意this的使用
閉包容易造成內(nèi)存泄漏,不需要的趕快干掉
注意new的成本
代碼示例java中的單例模式
java請類型可以私有化,外部new就會報錯。
JavaScript中的單例模式
class SingleObject { login() { console.log("login") } } // 利用閉包實現(xiàn)了私有變量 SingleObject.getInstance = (fucntion () { let instance return function () { if (!instance) { instance = new SingleObject() } return instance } })() let obj1 = SingleObject.getInstance() obj1.login() let obj2 = SingleObject.getInstance() obj2.login() // 兩者是否相等 console.log(obj1 === obj2) // js弱類型,沒有私有方法,使用者還是可以直接new 一個 SingleObject,也會有 login方法 console.log("------------分割線------------") let obj3 = new SingleObject() obj3.login() console.log("obj1===obj3",obj1 === obj3) // false 不是單例
最簡單的單例模式,就是對象。在 JavaScript 中 定義一個對象(Object),那么它的屬性,就只能通過它自己調(diào)用。就算兩個不同的對象,有相同的屬性名,也不能相互調(diào)用,保護了自己屬性。
登錄框 單例
class LoginForm { constructor() { this.state = "hide" } show() { if (this.state === "show") { alert("已經(jīng)顯示") return } this.state = "show" console.log("登錄框已顯示") } hide() { if (this.state === "hide") { alert("已經(jīng)隱藏") return } this.state = "hide" console.log("登錄框已隱藏") } } LoginForm.getInstance = (function () { let instance return function () { if (!instance) { instance = new LoginForm(); } return instance } })() // 一個頁面中調(diào)用登錄框 let login1 = LoginForm.getInstance() login1.show() // login1.hide() // 另一個頁面中調(diào)用登錄框 let login2 = LoginForm.getInstance() login2.show() // 兩者是否相等 console.log("login1 === login2", login1 === login2)最后
創(chuàng)建了一個前端學習交流群,感興趣的朋友,一起來嗨呀!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99539.html
摘要:單例模式單例模式就是保證一個類僅有一個實例并提供一個訪問它的全局訪問點其最大的特點就是永遠只返回一個實例實例通過來獲取類的唯一對象其缺點也明顯增加了類的不透明性透明的單例模式最終會被返回使用代理實現(xiàn)單例模式將負責管理單例的邏輯移到了代理類中 單例模式 單例模式 就是保證一個類僅有一個實例, 并提供一個訪問它的全局訪問點. 其最大的特點就是 永遠只返回一個實例 var Sin...
摘要:所以程序在引入文件的時候用了單例模式,一個文件實例化一次,這種做法無疑是好的,但是也容易引起。在我們平時的開發(fā)過程中,可以借鑒這兩種方式去緩存變量,節(jié)點等。 這一章作者講了一個例子,就是在用單例模式生成一個dom節(jié)點,還要做到只有訪問的時候才創(chuàng)建,后續(xù)訪問直接用前面創(chuàng)建的。那么實際開發(fā)中我們會用到這個模式嗎?現(xiàn)在我們基本都是用vue,react,angular開發(fā),不太會直接去操作do...
摘要:博主按每天一個設計模式旨在初步領會設計模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語言實現(xiàn)。單例模式用途如果一個類負責連接數(shù)據(jù)庫的線程池日志記錄邏輯等等,此時需要單例模式來保證對象不被重復創(chuàng)建,以達到降低開銷的目的。 博主按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語言實現(xiàn)。誠然,每種設計模式都有多種實...
摘要:博主按每天一個設計模式旨在初步領會設計模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語言實現(xiàn)。單例模式用途如果一個類負責連接數(shù)據(jù)庫的線程池日志記錄邏輯等等,此時需要單例模式來保證對象不被重復創(chuàng)建,以達到降低開銷的目的。 博主按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語言實現(xiàn)。誠然,每種設計模式都有多種實...
摘要:本系列為設計模式與開發(fā)實踐作者曾探學習總結(jié),如想深入了解,請支持作者原版單例模式實現(xiàn)單例模式單例模式的定義是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 本系列為《JavaScript設計模式與開發(fā)實踐》(作者:曾探)學習總結(jié),如想深入了解,請支持作者原版 單例模式 實現(xiàn)單例模式 單例模式的定義是:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。單例模式是一種常用的模式...
閱讀 1301·2021-11-15 18:14
閱讀 3222·2021-08-25 09:38
閱讀 2698·2019-08-30 10:55
閱讀 2734·2019-08-29 16:39
閱讀 1339·2019-08-29 15:07
閱讀 2474·2019-08-29 14:14
閱讀 842·2019-08-29 12:36
閱讀 944·2019-08-29 11:21