面向?qū)ο蟮娜筇匦浴⒘笤瓌t

0、三大特性

封裝

繼承

多態(tài)


1、單一責(zé)任原則

? ? ? 單一責(zé)任(Single Responsibility Principle)是優(yōu)化代碼的第一步。定義:有且僅有一個(gè)引起它變化的原因。這個(gè)原則不光適應(yīng)于類,也適應(yīng)方法。因?yàn)閱我回?zé)任的界限并不是那么好劃分,所以備受爭(zhēng)議,很多時(shí)候需要依靠個(gè)人經(jīng)驗(yàn)來(lái)界定。很多情況是寫代碼的工程師不知道自己所寫的類或方法的職責(zé)是什么。遵循單一職責(zé)原則就不會(huì)出現(xiàn)類T履行了P1和P2兩個(gè)職責(zé),而是T1負(fù)責(zé)P1職責(zé),T2負(fù)責(zé)P2職責(zé);就不會(huì)出現(xiàn)A方法做了B應(yīng)該執(zhí)行的任務(wù)。

? ? ? 單一責(zé)任帶來(lái)的好處:1、可以降低類或方法的復(fù)雜度,只負(fù)責(zé)一項(xiàng)職責(zé),其邏輯肯定要比負(fù)責(zé)多項(xiàng)職責(zé)簡(jiǎn)單的多;2、提高代碼的可讀性,提高系統(tǒng)的可維護(hù)性;3、變更引起的風(fēng)險(xiǎn)降低,變更是必然的,如果單一職責(zé)原則遵守的好,當(dāng)修改一個(gè)功能時(shí),可以顯著降低對(duì)其他功能的影響。

2、開(kāi)閉原則

? ? ? 開(kāi)閉原則(Open Close Principle)讓程序更穩(wěn)定更靈活。定義:一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。當(dāng)軟件需求變化時(shí),盡量通過(guò)擴(kuò)展軟件實(shí)體的行為來(lái)實(shí)現(xiàn)變化,而不是通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)變化。我在應(yīng)對(duì)新的或者改變的特性時(shí)通常是擴(kuò)展其功能而實(shí)現(xiàn),修改只因bug而被修改。 開(kāi)閉原則的重要手段是通過(guò)抽象。

3、里氏替換原則

? ? ? 里氏替換(Liskov Subsitution Principle)讓系統(tǒng)擴(kuò)展性更好。定義1:如果對(duì)每一個(gè)類型為 T1的對(duì)象 o1,都有類型為 T2 的對(duì)象o2,使得以 T1定義的所有程序 P 在所有的對(duì)象 o1 都代換成 o2 時(shí),程序 P 的行為沒(méi)有發(fā)生變化,那么類型 T2 是類型 T1 的子類型。里氏替換的核心是抽象,抽象又依賴于繼承的特性。

? ? ?通俗的來(lái)講就是:子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。它包含以下4層含義1、子類可以實(shí)現(xiàn)父類的抽象方法,但不能覆蓋父類的非抽象方法。2、子類中可以增加自己特有的方法。3當(dāng)子類的方法重載父類的方法時(shí),方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松。4、當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí),方法的后置條件(即方法的返回值)要比父類更嚴(yán)格。

4、依賴倒置原則

? ? ? ?依賴倒置原則(Dependence Inversion Principle)指一種特定的解耦形式,使得高層次的模塊不依賴于低層次的模塊的實(shí)現(xiàn)細(xì)節(jié)的目的。定義:高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。依賴倒置的核心就是面向抽象編程。模塊間的依賴通過(guò)抽象發(fā)生,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過(guò)接口或抽象類產(chǎn)生的。

5、接口隔離原則

? ? ? ?接口隔離原則(Interface Segregation Principle)讓系統(tǒng)擁有更高的靈活性。定義:客戶端不應(yīng)該依賴它不需要的接口;一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。

? ? ? 接口隔離原則的含義是:建立單一接口,不要建立龐大臃腫的接口,盡量細(xì)化接口,接口中的方法盡量少。我們要為各個(gè)類建立專用的接口,而不要試圖去建立一個(gè)很龐大的接口供所有依賴它的類去調(diào)用。

? ? ? 采用接口隔離原則對(duì)接口約束時(shí),要注意以下幾點(diǎn):1、接口盡量小,但是要有限度。如果過(guò)小,則會(huì)造成接口數(shù)量過(guò)多,使設(shè)計(jì)復(fù)雜化。2、為依賴接口的類定制服務(wù),只暴露給調(diào)用的類它需要的方法,它不需要的方法則隱藏起來(lái)。只有專注地為一個(gè)模塊提供定制服務(wù),才能建立最小的依賴關(guān)系。3、提高內(nèi)聚,減少對(duì)外交互。使接口用最少的方法去完成最多的事情。

6、迪米特原則

? ? ? 迪米特原則(Law of Demeter)也稱為最少知識(shí)原則。定義:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。迪米特原則落實(shí)了軟件編程的總的原則:低耦合,高內(nèi)聚。

? ? ? ?迪米特法則的初衷是降低類之間的耦合,由于每個(gè)類都減少了不必要的依賴,因此的確可以降低耦合關(guān)系。但是凡事都有度,雖然可以避免與非直接的類通信,但是要通信,必然會(huì)通過(guò)一個(gè)“中介”來(lái)發(fā)生聯(lián)系,過(guò)分的使用迪米特原則,會(huì)產(chǎn)生大量這樣的中介和傳遞類,導(dǎo)致系統(tǒng)復(fù)雜度變大。所以在采用迪米特法則時(shí)要反復(fù)權(quán)衡,既做到結(jié)構(gòu)清晰,又要高內(nèi)聚低耦合。


參考:

http://www.uml.org.cn/sjms/201211023.asp#3


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容