原則二:單一職責原則(single responsibility principle)
原則三:依賴倒置原則(dependency inversion principle)
原則四:介面分離原則(inte***ce segregation principle)
原則五:迪公尺特法則(law of demeter)
原則六:黎克特制替換原則(liskov substitution principle)
用抽象構建框架,用實現擴充套件細節。不以改動原有類的方式來實現新需求,而是應該以實現事先抽象出來的介面(或具體類繼承抽象類)的方式來實現。
實踐開閉原則的優點在於可以在不改動原有**的前提下給程式擴充套件功能。增加了程式的可擴充套件性,同時也降低了程式的維護成本。類職責的變化往往就是導致類變化的原因:也就是說如果乙個類具有多種職責,就會有多種導致這個類變化的原因,從而導致這個類的維護變得困難。
往往在軟體開發中隨著需求的不斷增加,可能會給原來的類新增一些本來不屬於它的一些職責,從而違反了單一職責原則。如果我們發現當前類的職責不僅僅有乙個,就應該將本來不屬於該類真正的職責分離出去。
不僅僅是類,函式(方法)也要遵循單一職責原則,即:乙個函式(方法)只做一件事情。如果發現乙個函式(方法)裡面有不同的任務,則需要將不同的任務以另乙個函式(方法)的形式分離出去。
如果類與方法的職責劃分得很清晰,不但可以提高**的可讀性,更實際性地更降低了程式出錯的風險,因為清晰的**會讓bug無處藏身,也有利於bug的追蹤,也就是降低了程式的維護成本。
針對介面程式設計,而不是針對實現程式設計。依賴抽象,而不是依賴實現。盡量不要從具體的類派生,而是以繼承抽象類或實現介面來實現。
關於高層模組與低層模組的劃分可以按照決策能力的高低進行劃分。業務層自然就處於上層模組,邏輯層和資料層自然就歸類為底層。
抽象不應該依賴細節;細節應該依賴抽象。
高層模組不能依賴低層模組,二者都應該依賴抽象。
通過抽象來搭建框架,建立類和類的關聯,以減少類間的耦合性。而且以抽象搭建的系統要比以具體實現搭建的系統更加穩定,擴充套件性更高,同時也便於維護。
客戶端不應該依賴它不需要實現的介面。不建立龐大臃腫的介面,應盡量細化介面,介面中的方法應該盡量少。
避免同乙個介面裡面包含不同類職責的方法,介面責任劃分更加明確,符合高內聚低耦合的思想。
迪公尺特法則也叫做最少知道原則(least know principle),乙個類應該只和它的成員變數,方法的輸入,返回引數中的類作交流,而不應該引入其他的類(間接交流)
實踐迪公尺特法則可以良好地降低類與類之間的耦合,減少類與類之間的關聯程度,讓類與類之間的協作更加直接。
在繼承體系中,子類中可以增加自己特有的方法,也可以實現父類的抽象方法,但是不能重寫父類的非抽象方法,否則該繼承關係就不是乙個正確的繼承關係。
可以檢驗繼承使用的正確性,約束繼承在使用上的氾濫。
物件導向的六大設計原則
open close principle,縮寫是ocp,軟體中的物件應該對於擴充套件是開放的,但是對於修改是封閉的。也就是在軟體需求變化時,應該盡量通過擴充套件的方式公升級 維護,而不是修改原有的 來實現。黎克特制替換原則的縮寫是lsp,定義是說,所有引用基類的地方必須能夠透明地使用其子類物件。這個...
C 物件導向的六大設計原則
就是學習一系列的原則,方法技巧,經驗,模式。達到oop的目標 讓程式高可擴充套件性,高維護性,高效能.1.單一原則 物件職責明確原則 srp 乙個物件所完成的任務是明確的。而不能設計萬能類!2.開閉原則 開放擴充套件,封閉修改 ocp 如果乙個專案的需求變化,會導致很多程式的修改,則我們說你的程式設...
C 物件導向的六大設計原則
就是學習一系列的原則,方法技巧,經驗,模式。達到oop的目標 讓程式高可擴充套件性,高維護性,高效能.1.單一原則 物件職責明確原則 srp 乙個物件所完成的任務是明確的。而不能設計萬能類!2.開閉原則 開放擴充套件,封閉修改 ocp 如果乙個專案的需求變化,會導致很多程式的修改,則我們說你的程式設...