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