成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

java 有人說設(shè)計模式是為了彌補Java語言的缺陷,你覺得是這樣嗎?

有人說設(shè)計模式是為了彌補Java語言的缺陷,你覺得是這樣嗎?看你從哪個層面來看待設(shè)計模式!語言層面如果你從語言層面來看設(shè)計模式,那么這個說法可以說是對的。有部分設(shè)計模式是彌補了Java語言上的不足,最

有人說設(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)定的。核心模塊依賴了非核心模塊會導致核心模塊也不穩(wěn)定。所以可以使用策略模式來解耦:

看箭頭的方向,現(xiàn)在轉(zhuǎn)換模塊依賴于上傳模塊,轉(zhuǎn)換模塊的變化不會影響上傳模塊。依賴方向改變了,這就是傳說中的「依賴倒置」!