4.2牢記單一責(zé)任和開(kāi)閉原則


? ? ? 再?gòu)?fù)雜的設(shè)計(jì),當(dāng)你將其徹底拆解和分析之后,你會(huì)發(fā)現(xiàn)其核心實(shí)質(zhì)不過(guò)是單一責(zé)任原則(SRP)和開(kāi)閉原則(OCP)的具體應(yīng)用和實(shí)現(xiàn)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? —— lorne
SRP&OCP的地位
我一直認(rèn)為單一責(zé)任和開(kāi)閉原則是軟件開(kāi)發(fā)設(shè)計(jì)中的最頂級(jí)原則
單一責(zé)任是模塊與類(lèi)設(shè)計(jì)的第一原則,開(kāi)閉原則是抽象與拓展的第一原則。
在SOLID中 也是最靠前的兩個(gè)原則
S 指的是單一責(zé)任,O指的就是開(kāi)閉原則。
L是里氏替換原則,I是接口隔離原則,D是依賴(lài)導(dǎo)致原則。
而這三個(gè)原則都是對(duì)具體操作層面的約束原則。
SRP原則
? ? 單一責(zé)任,要求我們對(duì)類(lèi)、函數(shù)、包、模塊都需要遵循單一責(zé)任的原則,其目的是為了可維護(hù)性與復(fù)用行。
? ? 可維護(hù)性是指,通過(guò)將相同的代碼維護(hù)在一塊,可以讓功能的封裝性更強(qiáng),同樣對(duì)于修改維護(hù)的時(shí)候,也只需要修改一處地方即可。
? ? 復(fù)用行是指,通過(guò)對(duì)相同指責(zé)代碼的封裝,從而可以在需要使用這個(gè)功能的時(shí)候,容易引入進(jìn)來(lái),從而提升了代碼的重復(fù)利用率。
OCP原則
? ? ?開(kāi)閉原則,要求我們對(duì)新增開(kāi)放,對(duì)修改關(guān)閉。其目的是為了可維護(hù)性與拓展性。
? ? ?可維護(hù)性是指,如果對(duì)功能的調(diào)整都需要通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)的話,那么將會(huì)帶來(lái)很多的隱患,因?yàn)橹灰歉膭?dòng)過(guò)的代碼都有可能會(huì)存在的問(wèn)題,因此我們已經(jīng)盡量的避免修改已有的邏輯,而是通過(guò)新增來(lái)實(shí)現(xiàn),因?yàn)樾略龃a的話,其影響面只是新代碼的影響,而不會(huì)影響已有的邏輯。
? ? 拓展性是指,想要達(dá)成通過(guò)新增來(lái)實(shí)現(xiàn)對(duì)已有功能的調(diào)整,則需要我們采用一些設(shè)計(jì)技巧來(lái)實(shí)現(xiàn)的,例如多態(tài)、繼承、事件驅(qū)動(dòng)、接口隔離等方式,當(dāng)你采用這樣的方式處理程序以后,自然會(huì)帶來(lái)更強(qiáng)的拓展性與適配能力。
總結(jié)
? ? ?SRP原則,我用兩個(gè)例子場(chǎng)景來(lái)介紹
? ? ?文件歸檔能力,如果你需要做大量的文字處理的功能,你想要在寫(xiě)新的文檔的時(shí)候,使用你之前的文檔內(nèi)容,那么你就需要做好兩件事情,1是文件的分類(lèi),2是文件的命名與段落的標(biāo)題總結(jié)。如果你能做好這兩項(xiàng)能力,那么你在復(fù)用你之前的勞動(dòng)成果的時(shí)候,就變得的非常的容易了。
? ? 打掃衛(wèi)生,我認(rèn)為打掃衛(wèi)生這個(gè)事情,想要做好這個(gè)工作,需要的也是兩方面的能力,分別是歸納和整齊。歸納是指,我們要把物品做好分類(lèi),整齊是指,我們要?dú)w納好的物品排放整齊。滿足這兩點(diǎn)就說(shuō)明,就已經(jīng)是非常成功的打掃工作了。
? ? ?OCP原則,更多的是考察程序員的抽象能力,只有在運(yùn)用好抽象能力以后,你才能做好OCP的工作。像是多態(tài)、事件驅(qū)動(dòng)、接口隔離更多的是設(shè)計(jì)者的面相對(duì)象的底層設(shè)計(jì)能力,尤其是多態(tài),OCP想要做好必然會(huì)運(yùn)用多態(tài)的技術(shù)。
? ? 前面說(shuō)SRP和OCP是設(shè)計(jì)原則的兩大頂級(jí)原則,一個(gè)是教大家如何歸納分類(lèi)、一個(gè)是教大家如何抽象多態(tài),其實(shí)這兩大能力也是軟件設(shè)計(jì)中的最重要的能力。
? ? 因此想要成為合格的架構(gòu)師,那么對(duì)于這兩個(gè)設(shè)計(jì)原則必須要做到牢記在心、熟練應(yīng)用。無(wú)論是多復(fù)雜的架構(gòu)設(shè)計(jì),當(dāng)你把他拆解分析完以后,最終也無(wú)非是這兩個(gè)原則的表現(xiàn)。