Java常用的五種設(shè)計(jì)模式 java設(shè)計(jì)模式應(yīng)該在什么時(shí)候?qū)W?
java設(shè)計(jì)模式應(yīng)該在什么時(shí)候?qū)W?1. 應(yīng)該怎么學(xué)習(xí):自己要學(xué)會(huì)總結(jié),積累設(shè)計(jì)開(kāi)發(fā)經(jīng)驗(yàn)。設(shè)計(jì)模式都是在經(jīng)驗(yàn)中獲得的。2. 什么時(shí)候?qū)W:這個(gè)要看個(gè)人的想法,如果想在軟件這一行深造,有所建樹(shù),當(dāng)然是越早學(xué)
java設(shè)計(jì)模式應(yīng)該在什么時(shí)候?qū)W?
1. 應(yīng)該怎么學(xué)習(xí):自己要學(xué)會(huì)總結(jié),積累設(shè)計(jì)開(kāi)發(fā)經(jīng)驗(yàn)。設(shè)計(jì)模式都是在經(jīng)驗(yàn)中獲得的。
2. 什么時(shí)候?qū)W:這個(gè)要看個(gè)人的想法,如果想在軟件這一行深造,有所建樹(shù),當(dāng)然是越早學(xué)習(xí)越好了!
3. 要什么基礎(chǔ)作為前提:需要具備一定的軟件設(shè)計(jì)、封轉(zhuǎn)以及抽象的思想。學(xué)會(huì)接口編程,接口隔離解耦等。
4. 還有那些常用:常用的設(shè)計(jì)模式主要有單例模式、抽象工廠模式、工廠方法模式、模板方法模式、責(zé)任鏈模式、策略模式等等。這還要看具體的項(xiàng)目情況而定的。
5. 學(xué)習(xí)的曲線(xiàn):首先,應(yīng)該積累軟件設(shè)計(jì)經(jīng)驗(yàn),在項(xiàng)目實(shí)踐中總結(jié)、歸納,悟出一定的設(shè)計(jì)思想,還有就是要有軟件設(shè)計(jì)模式書(shū)籍的輔助。個(gè)人推薦《軟件秘笈-設(shè)計(jì)模式那點(diǎn)事》一書(shū),當(dāng)中例舉23個(gè)實(shí)例講解23種設(shè)計(jì)模式,還有綜合實(shí)戰(zhàn)應(yīng)用,并附各個(gè)模式的靜態(tài)類(lèi)圖、適用場(chǎng)合等等,對(duì)于學(xué)習(xí)設(shè)計(jì)模式幫助很大!
有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷,你覺(jué)得是這樣嗎?
看你從哪個(gè)層面來(lái)看待設(shè)計(jì)模式!
語(yǔ)言層面
如果你從語(yǔ)言層面來(lái)看設(shè)計(jì)模式,那么這個(gè)說(shuō)法可以說(shuō)是對(duì)的。有部分設(shè)計(jì)模式是彌補(bǔ)了Java語(yǔ)言上的不足,最明顯的就是單例模式。
在Java中本身沒(méi)有提供單例對(duì)象的創(chuàng)建,需要通過(guò)單例模式來(lái)實(shí)現(xiàn),什么餓漢式,懶漢式,多線(xiàn)程下還要關(guān)注DCL,volatile關(guān)鍵字等等,衍生了很多的面試題。
而在現(xiàn)代語(yǔ)言中,很多都提供了創(chuàng)建單例對(duì)象的語(yǔ)法,比如Scala,Kotlin的object關(guān)鍵字。
代碼設(shè)計(jì)層面
如果從代碼設(shè)計(jì)層面來(lái)看,設(shè)計(jì)模式提供了一套可復(fù)用的代碼結(jié)構(gòu),來(lái)解決特定問(wèn)題。比如,當(dāng)需要?jiǎng)討B(tài)化某些可選部分時(shí),可以使用策略模式。當(dāng)需要一組操作來(lái)順序操作某個(gè)對(duì)象時(shí),可以使用職責(zé)鏈模式。
架構(gòu)層面
從架構(gòu)層面來(lái)看,設(shè)計(jì)模式對(duì)組件關(guān)系進(jìn)行了解耦。
假設(shè)我們要實(shí)現(xiàn)一個(gè)文件服務(wù)器,有一個(gè)UploadService來(lái)進(jìn)行上傳操作,可以調(diào)用ConvertService對(duì)文件進(jìn)行轉(zhuǎn)換。UploadService屬于核心模塊「上傳模塊」,而ConvertService屬于非核心模塊「轉(zhuǎn)換模塊」。
如果UploadService直接去調(diào)用ConvertService來(lái)執(zhí)行轉(zhuǎn)換,那么核心模塊就依賴(lài)了非核心模塊。如下圖:
非核心模塊是相對(duì)不穩(wěn)定的,核心模塊是相對(duì)穩(wěn)定的。核心模塊依賴(lài)了非核心模塊會(huì)導(dǎo)致核心模塊也不穩(wěn)定。所以可以使用策略模式來(lái)解耦:
看箭頭的方向,現(xiàn)在轉(zhuǎn)換模塊依賴(lài)于上傳模塊,轉(zhuǎn)換模塊的變化不會(huì)影響上傳模塊。依賴(lài)方向改變了,這就是傳說(shuō)中的「依賴(lài)倒置」!
如何學(xué)習(xí)spring?是先學(xué)習(xí)設(shè)計(jì)模式還是spring?
看見(jiàn)上一位答主的可愛(ài)回答想笑。題主問(wèn)這個(gè)問(wèn)題應(yīng)該是還沒(méi)接觸了解過(guò)spring框架,我有下面的學(xué)習(xí)建議:
spring框架和設(shè)計(jì)模式是兩大學(xué)習(xí)點(diǎn)
spring框架包含了許多架構(gòu)的頂級(jí)設(shè)計(jì)思路,去研究它是需要花費(fèi)比較多經(jīng)歷的。而設(shè)計(jì)模式也是一大課題 ,有專(zhuān)門(mén)一本厚厚的設(shè)計(jì)模式的書(shū)籍給你學(xué)習(xí)。因此,這兩種東西不能說(shuō)先去學(xué)誰(shuí),應(yīng)該是用到哪個(gè)學(xué)哪個(gè)。
有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java的不足,這是有一定道理的,常規(guī)的二十三種設(shè)計(jì)模式如果說(shuō)你要全部理清還算要一點(diǎn)時(shí)間,要說(shuō)能學(xué)精通還真的挺難。
spring框架的學(xué)習(xí)建議:
- 先學(xué)習(xí)搭ssm框架項(xiàng)目感受spring框架的魅力。
- 對(duì)spring框架原理進(jìn)行理解,這里如果牽扯上了什么設(shè)計(jì)模式就去學(xué)習(xí)對(duì)應(yīng)的設(shè)計(jì)模式。
- 看看能不能理解和基本運(yùn)用依賴(lài)注入和面向切面編程了。
- 推薦讀《spring源碼深度解析》,系統(tǒng)性得結(jié)合源碼學(xué)習(xí)spring框架,途中一定會(huì)遇到的設(shè)計(jì)模式,遇到哪種模式就學(xué)哪種模式。
歸納一下就是兩種并行學(xué)習(xí),設(shè)計(jì)模式是輔助spring框架的理解。
覺(jué)得“熱心哥哥宇文笑”解讀專(zhuān)業(yè)的點(diǎn)點(diǎn)關(guān)注,會(huì)帶來(lái)更多精彩內(nèi)容分享
java if條件太多用什么設(shè)計(jì)模式?
狀態(tài)模式。
它允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對(duì)象看起來(lái)似乎修改了它的類(lèi),狀態(tài)模式是設(shè)計(jì)模式的一種,屬于行為模式。