SOLID 原則
如果熟悉面向?qū)ο缶幊?,可能聽說過SOLID原則。
通過插圖更好地理解這些原則,并強(qiáng)調(diào)每個(gè)原則的目標(biāo)。
您會(huì)看到,其中一些原則可能看起來(lái)相似,但它們的目標(biāo)不同。有可能在滿足一個(gè)原則的同時(shí)違反另一個(gè)原則,即使它們是相似的。
為了簡(jiǎn)單起見,我將使用“類”這個(gè)詞,但請(qǐng)注意它也可以應(yīng)用于本文中的函數(shù)、方法或模塊。
更新*
我收到了一些關(guān)于本文中的 Open Closed 違反單一職責(zé)原則的評(píng)論。請(qǐng)注意,本文的目的是獨(dú)立地解釋這些原則中的每一個(gè)。 此外,職責(zé)(或角色)與行動(dòng)不同。在 SRP 中,我使用了“I am Painter”,在 Open-Closed 中,我使用了“I can Paint”。 重要的是要注意這一點(diǎn),因?yàn)榭梢詧?zhí)行多個(gè)操作來(lái)履行職責(zé)(或角色)。該類應(yīng)該有一個(gè)責(zé)任(SRP),但其履行該責(zé)任的功能應(yīng)該對(duì)擴(kuò)展(OCP)開放。
現(xiàn)在,讓我們開始吧!
堅(jiān)實(shí)的原則
S——單一職責(zé)
一個(gè)類應(yīng)該有一個(gè)單一的職責(zé)
如果一個(gè)類有很多職責(zé),它會(huì)增加錯(cuò)誤的可能性,因?yàn)楦钠渎氊?zé)之一可能會(huì)在您不知情的情況下影響其他職責(zé)。
目標(biāo)
該原則旨在分離行為,以便如果由于您的更改而出現(xiàn)錯(cuò)誤,它不會(huì)影響其他不相關(guān)的行為。
O – 開閉原則
類應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉
更改類的當(dāng)前行為將影響使用該類的所有系統(tǒng)。
如果您希望類執(zhí)行更多功能,理想的方法是添加到已經(jīng)存在的功能而不是更改它們。
目標(biāo)
這個(gè)原則旨在擴(kuò)展一個(gè)類的行為而不改變?cè)擃惖默F(xiàn)有行為。這是為了避免在使用類的任何地方引起錯(cuò)誤。
L – 里氏替換原則
如果 S 是 T 的子類型,則程序中 T 類型的對(duì)象可以被 S 類型的對(duì)象替換,而不會(huì)改變?cè)摮绦虻娜魏嗡鑼傩浴?/p>
當(dāng)子類不能執(zhí)行與其父類相同的操作時(shí),這可能會(huì)導(dǎo)致錯(cuò)誤。
子類應(yīng)該能夠處理相同的請(qǐng)求并傳遞與父類相同的結(jié)果,或者它可以傳遞相同類型的結(jié)果。
圖片顯示父類交付咖啡(它可以是任何類型的咖啡)。兒子可以制作卡布奇諾,因?yàn)樗且环N特定類型的咖啡,但不能送水。
如果子類不滿足這些要求,則意味著子類被徹底改變,違反了這一原則。
目標(biāo)
該原則旨在強(qiáng)制一致性,以便可以以相同的方式使用父類或其子類而不會(huì)出現(xiàn)任何錯(cuò)誤。
I -接口隔離
不應(yīng)強(qiáng)迫客戶依賴他們不使用的方法。
接口隔離原則表明客戶端不應(yīng)該被強(qiáng)迫實(shí)現(xiàn)一些他們不會(huì)使用的接口,應(yīng)該把胖接口中的方法分組,然后用多個(gè)接口替代它,每個(gè)接口服務(wù)于一個(gè)子模塊。簡(jiǎn)單地說,就是使用多個(gè)專門的接口比使用單個(gè)接口要好很多。
目標(biāo)
這個(gè)原則旨在將一組動(dòng)作拆分成更小的集合,以便一個(gè)類只執(zhí)行它需要的一組動(dòng)作。
D -依賴倒置
– 高級(jí)模塊不應(yīng)依賴于低級(jí)模塊。兩者都應(yīng)該依賴于抽象。 – 抽象不應(yīng)依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該取決于抽象。
首先,讓我們更簡(jiǎn)單地定義這里使用的術(shù)語(yǔ)
高級(jí)模塊(或類):使用工具執(zhí)行操作的類。
低級(jí)模塊(或類):執(zhí)行操作所需的工具
Abstraction:表示連接兩個(gè)類的接口。
開閉原則(OCP)是面向?qū)ο笤O(shè)計(jì)原則的基礎(chǔ)也是整個(gè)設(shè)計(jì)的一個(gè)終極目標(biāo),而依賴倒置原則(DIP )則是實(shí)現(xiàn)OCP原則的一個(gè)基礎(chǔ),換句話說開閉原則(OCP)是你蓋一棟大樓的設(shè)計(jì)藍(lán)圖,那么依賴倒置原則就是蓋這棟大樓的一個(gè)鋼構(gòu)框架。
目標(biāo)
該原則旨在通過引入接口來(lái)減少高級(jí)類對(duì)低級(jí)類的依賴。