java常用的設(shè)計(jì)模式 有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷,你覺(jué)得是這樣嗎?
有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷,你覺(jué)得是這樣嗎?如果你從語(yǔ)言的角度來(lái)看設(shè)計(jì)模式,那是對(duì)的。一些設(shè)計(jì)模式彌補(bǔ)了Java語(yǔ)言的不足,其中最明顯的是singleton模式。Java本身不提供單例
有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷,你覺(jué)得是這樣嗎?
如果你從語(yǔ)言的角度來(lái)看設(shè)計(jì)模式,那是對(duì)的。一些設(shè)計(jì)模式彌補(bǔ)了Java語(yǔ)言的不足,其中最明顯的是singleton模式。
Java本身不提供單例對(duì)象創(chuàng)建,需要通過(guò)單例模式實(shí)現(xiàn)。什么樣的餓、懶、多線程都要注意DCL、易變關(guān)鍵字等,導(dǎo)致面試題很多。
在現(xiàn)代語(yǔ)言中,許多提供了創(chuàng)建單例對(duì)象的語(yǔ)法,例如scala和kotlin的對(duì)象關(guān)鍵字。
從架構(gòu)的角度來(lái)看,設(shè)計(jì)模式將組件關(guān)系解耦。
假設(shè)我們要實(shí)現(xiàn)一個(gè)帶有上載服務(wù)的文件服務(wù)器來(lái)上載文件。我們可以調(diào)用convertservice來(lái)轉(zhuǎn)換文件。Uploadservice屬于核心模塊upload module,convertservice屬于非核心模塊conversion module。
如果uploadservice直接調(diào)用convertservice來(lái)執(zhí)行轉(zhuǎn)換,則核心模塊依賴于非核心模塊。如下圖所示:
非核心模塊相對(duì)不穩(wěn)定,核心模塊相對(duì)穩(wěn)定。核心模塊對(duì)非核心模塊的依賴將導(dǎo)致核心模塊的不穩(wěn)定性。所以可以使用策略模式來(lái)解耦:
看箭頭方向,現(xiàn)在轉(zhuǎn)換模塊依賴于上傳模塊,轉(zhuǎn)換模塊的變化不會(huì)影響上傳模塊。依賴的方向改變了。這就是傳說(shuō)中的“依賴倒置”
如何學(xué)習(xí)spring?是先學(xué)習(xí)設(shè)計(jì)模式還是spring?
當(dāng)我看到最后一個(gè)可愛(ài)的答案時(shí),我想笑。主要的問(wèn)題應(yīng)該是我還沒(méi)有接觸到spring框架。我有以下學(xué)習(xí)建議:
spring框架包含了許多頂級(jí)的架構(gòu)設(shè)計(jì)思想。研究它需要很多經(jīng)驗(yàn)。而設(shè)計(jì)模式也是一個(gè)大課題,有一本厚厚的設(shè)計(jì)模式書供你學(xué)習(xí)。所以,我們不能說(shuō)誰(shuí)先學(xué)這兩樣?xùn)|西,應(yīng)該用哪兩樣?xùn)|西,應(yīng)該學(xué)哪兩樣?xùn)|西。
有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java的缺點(diǎn),這是合理的。把23種傳統(tǒng)的設(shè)計(jì)模式都整理出來(lái)需要一點(diǎn)時(shí)間,要學(xué)會(huì)掌握它們確實(shí)很難。
請(qǐng)問(wèn)java如何學(xué)習(xí)?
這是老生常談。你為什么這么說(shuō)?不管你學(xué)什么,首先會(huì)有人問(wèn)你怎么學(xué)這個(gè)東西?如何有效地學(xué)習(xí)?什么是好辦法?可以找到各種各樣的答案,但都是先打好基礎(chǔ),再結(jié)合實(shí)踐,然后慢慢前進(jìn)。其實(shí)學(xué)習(xí)沒(méi)有捷徑,只有循序漸進(jìn),腳踏實(shí)地,慢慢積累,努力夠了,順其自然。
但是,不同行業(yè)的學(xué)習(xí)方法存在一些差異。在IT行業(yè),你所學(xué)的基本上都是用于應(yīng)用的,所以更多的實(shí)踐是必不可少的。無(wú)論是奠基還是后期的高級(jí)學(xué)習(xí),更多的思考是貫穿始終的。當(dāng)你遇到一些你不明白的事情時(shí),你不能去想它。別擔(dān)心?;厥淄率菍?duì)的,不要陷入困境,問(wèn)題往往是由于你的知識(shí)面太窄,所以看到后面,前面自然頓悟。總之,腳踏實(shí)地,慢慢來(lái),堅(jiān)持不懈,兩個(gè)月的se基本語(yǔ)法,面向?qū)ο蟮幕竟δ軒缀醵寄苷莆铡?/p>
隨著學(xué)習(xí)的深入,你會(huì)覺(jué)得自己無(wú)所不能,所向披靡。祝賀 你。你剛剛跨入門檻,但還沒(méi)有開始。我把這個(gè)階段稱為“外行階段”。在這個(gè)階段,你的知識(shí)太少,覺(jué)得自己什么都有能力。事實(shí)上,你只是井底之蛙。
很快你就要經(jīng)歷這個(gè)階段了,突然有一天,你覺(jué)得什么都做不了,你很迷茫,你覺(jué)得路很長(zhǎng),你走不到盡頭,這次你都是真正的初學(xué)者,達(dá)到了第一級(jí)。
將來(lái),你會(huì)發(fā)現(xiàn)進(jìn)門之后,學(xué)習(xí)變得容易多了,不是你自己的代碼可以讀,學(xué)習(xí)是蓬勃發(fā)展的,這個(gè)時(shí)候你的技術(shù)也有了很大的提高,你已經(jīng)達(dá)到了第二個(gè)層次。
之后,你的技術(shù)越來(lái)越高,但你發(fā)現(xiàn)你知道的越來(lái)越少。這個(gè)時(shí)候,你的視野比以前高了好幾個(gè)層次,視野更大了,你看到了很多東西,你覺(jué)得自己知道的太少了。這是第三層。
結(jié)果,你繼續(xù)學(xué)習(xí),繼續(xù)補(bǔ)齊短板,了解的越來(lái)越多,你發(fā)現(xiàn)自己好像什么都沒(méi)有,到了第四級(jí)。
有一天,你發(fā)現(xiàn)第一層到第四層是一個(gè)循環(huán)過(guò)程。您馬上就會(huì)明白,IT行業(yè)就是這樣。技術(shù)更新和迭代非??臁=裉炷闶切袠I(yè)的領(lǐng)導(dǎo)者,明天你可能會(huì)成為一個(gè)“外行”。只有不斷學(xué)習(xí),才能不被行業(yè)淘汰。這是第五層。