摘要:?jiǎn)卫J秸f(shuō)到單例設(shè)計(jì)模式,中經(jīng)常使用的單例模式通常分兩種,懶漢模式和餓漢模式懶漢模式簡(jiǎn)單寫了下私有化構(gòu)造函數(shù)在獲取實(shí)例的方法中返回實(shí)例化對(duì)象雖然很多大佬都寫過(guò)啦,但是小生為了加深記憶便再寫一遍雖然實(shí)現(xiàn)了單例模式,但是未考慮到線程安全,多個(gè)線
java單例模式
說(shuō)到單例設(shè)計(jì)模式,Java中經(jīng)常使用
java的單例模式通常分兩種,懶漢模式和餓漢模式
class singleDemo { private static demoTarget; privete singleDemo () {}; public static singleDemo getInstance (data) { if (demoTarget === null) { demoTarget = new singleDemo() } return demoTarget } }
OK,簡(jiǎn)單寫了下
1.私有化構(gòu)造函數(shù)
2.在public獲取實(shí)例的方法中返回實(shí)例化對(duì)象
(雖然很多大佬都寫過(guò)啦,但是小生為了加深記憶便再寫一遍)
雖然實(shí)現(xiàn)了單例模式,但是未考慮到線程安全,多個(gè)線程訪問(wèn)能可能創(chuàng)建多個(gè)實(shí)例,也就是高并發(fā)時(shí)候單例模式會(huì)創(chuàng)建多個(gè)實(shí)例,那要如何解決此類問(wèn)題呢?
這時(shí)候有兩種,一種是原來(lái)的懶漢模式借助synchronized變身成為線程安全的懶漢模式,另一種則是餓漢模式
class singleDemo { private static demoTarget; privete singleDemo () {}; public static synchronized singleDemo getInstance (data) { if (demoTarget === null) { demoTarget= new singleDemo() } return demoTarget } }餓漢模式
什么是餓漢模式呢?就是在懶漢模式的基礎(chǔ)加一層鎖,能保證單例
class singleDemo { private static demoTarget = new singleDemo(); private singleDemo () {}; public static singleDemo getInstance (data) { return demoTarget } }
好啦,簡(jiǎn)單的把java常用的兩種單例模式給寫了下,???標(biāo)題不是js的單例模式嘛?標(biāo)題寫錯(cuò)了?沒寫錯(cuò),小生只是回憶一下java的知識(shí),望各位大佬見諒
在js中如何實(shí)現(xiàn)單例呢?
由于js都是單線程的,所以并不像java那樣麻煩,并不需要考慮多線程情況,沒錯(cuò),只要能獲取單例就行,廢話不說(shuō),代碼先上
let Single = (function () { function constructor () {} var instance; function getInstance(){ if (!instance) { instance = new constructor() } return instance } return { getInstance: getInstance } })() const demo1 = Single.getInstance() const demo2 = Single.getInstance() console.log(demo1 === demo2) // true
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96118.html
摘要:關(guān)于循環(huán)和閉包當(dāng)循環(huán)和閉包結(jié)合在一起時(shí),經(jīng)常會(huì)產(chǎn)生讓初學(xué)者覺得匪夷所思的問(wèn)題。閉包是一把雙刃劍是比較難以理解和掌握的部分,它十分強(qiáng)大,卻也有很大的缺陷,如何使用它完全取決于你自己。 在談閉包之前,我們首先要了解幾個(gè)概念: 什么是函數(shù)表達(dá)式? 與函數(shù)聲明有何不同? JavaScript查找標(biāo)識(shí)符的機(jī)制 JavaScript的作用域是詞法作用域 JavaScript的垃圾回收機(jī)制 先來(lái)...
摘要:如何避免內(nèi)存泄露內(nèi)存泄漏很常見,特別是前端去寫后端程序,閉包運(yùn)用不當(dāng),循環(huán)引用等都會(huì)導(dǎo)致內(nèi)存泄漏。有的時(shí)候很難避免一些可能產(chǎn)生內(nèi)存泄漏的問(wèn)題,可以利用每次調(diào)用都在一個(gè)沙箱環(huán)境下調(diào)用,用完回收調(diào)。 某一天用戶反饋打開的頁(yè)面白屏幕,怎么定位到產(chǎn)生錯(cuò)誤的原因呢?日常某次發(fā)布怎么確定發(fā)布會(huì)沒有引入bug呢?此時(shí)捕獲到代碼運(yùn)行的bug并上報(bào)是多么的重要。 既然捕獲錯(cuò)誤并上報(bào)是日常開發(fā)中不可缺少的...
摘要:如何避免內(nèi)存泄露內(nèi)存泄漏很常見,特別是前端去寫后端程序,閉包運(yùn)用不當(dāng),循環(huán)引用等都會(huì)導(dǎo)致內(nèi)存泄漏。有的時(shí)候很難避免一些可能產(chǎn)生內(nèi)存泄漏的問(wèn)題,可以利用每次調(diào)用都在一個(gè)沙箱環(huán)境下調(diào)用,用完回收調(diào)。 某一天用戶反饋打開的頁(yè)面白屏幕,怎么定位到產(chǎn)生錯(cuò)誤的原因呢?日常某次發(fā)布怎么確定發(fā)布會(huì)沒有引入bug呢?此時(shí)捕獲到代碼運(yùn)行的bug并上報(bào)是多么的重要。 既然捕獲錯(cuò)誤并上報(bào)是日常開發(fā)中不可缺少的...
閱讀 811·2023-04-25 20:18
閱讀 2092·2021-11-22 13:54
閱讀 2527·2021-09-26 09:55
閱讀 3857·2021-09-22 15:28
閱讀 2969·2021-09-03 10:34
閱讀 1710·2021-07-28 00:15
閱讀 1629·2019-08-30 14:25
閱讀 1281·2019-08-29 17:16