色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷

有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷?

看你從哪個(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),什么餓漢式,懶漢式,多線程下還要關(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)換,那么核心模塊就依賴了非核心模塊。如下圖:

非核心模塊是相對(duì)不穩(wěn)定的,核心模塊是相對(duì)穩(wěn)定的。核心模塊依賴了非核心模塊會(huì)導(dǎo)致核心模塊也不穩(wěn)定。所以可以使用策略模式來(lái)解耦:

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

java設(shè)計(jì),有人說(shuō)設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷