設計應該對擴充套件開放,對修改關閉。
在設計之初,就應該考慮以後可能改動的點,盡量通過介面來定義行為,以後通過不同的實現類的多型性來擴充套件功能,不要直接去修改原有**。
開閉原則是軟體設計的總的原則,最關鍵一點是利用多型性,定義抽象類或者介面來實現核心邏輯。
介面要作為定義好的互動規範發揮作用。
父類出現的地方,一定可以使用子類來替換。
這裡要求,子類在繼承時,不能覆蓋父類的非抽象方法,子類只能去實現父類的介面,可以新增自己特有的方法,但是不能覆蓋父類的非抽象方法。反過來說,如果父類的乙個方法可能會被子類重寫,應該把這個方法設計為介面或者抽象方法。
如果子類覆蓋了父類的非抽象方法,則呼叫父類該方法和呼叫子類該方法邏輯是不一樣的,就不能進行替換了。
黎克特制替換提高了系統的健壯性和靈活性。
乙個類應該只有乙個主要的功能,不要將多個關聯性不強的功能放到乙個類。
對於比較臃腫的類應該果斷拆分。乙個類只有粒度夠細,才能更多的得到復用。這就像是積木,越大的積木在變換的時候可用的地方越少。
避免實現類之間的依賴,應該都去依賴介面。
高層次的類不應該依賴低層次的具體實現類,應該依賴介面。
抽象類不應該去依賴具體類,都應該去依賴抽象。
核心是去依賴抽象,依賴介面,如果都去依賴了具體實現類,就難以通過多型性來實現開閉,不可避免的要去修改已有實現。
乙個介面不要有超過乙個的功能,介面的單一職責原則。
總之就是介面本身粒度要合理,不能乙個介面幹太多事情。使用的時候,使用多個介面去組合實現功能,避免使用大介面。
乙個類對其他類應該知道的越少越好,就是最小依賴。沒有必要的暴露的介面就不要暴露,盡量將複雜的邏輯封裝到自己內部。沒有必要讓外界知道的屬性和方法,就不要暴露;沒有必要依賴的其他類的屬性和方法,就不要依賴。
高內聚,低耦合。
少用繼承,多用組合。
繼承是一種強的耦合,組合相對弱一些。
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...