7種設計壞味道 1.僵化性: 很難對系統進行改動,由於每一個改動都會迫使許多對系統其餘部分的其它改動。 編程
2.脆弱性: 對系統的改動會致使系統中和改動的地方在概念上無關的許多地方出現問題。函數
3.牢固性: 很難解開系統的糾結,使之成爲一些可在其餘系統中重用的組件。spa
4.粘滯性: 作正確的事情比作錯誤的事情要困難。設計
5.複雜性(沒必要要的): 設計中包含有不具任何直接好處的基礎結構。指針
6.重複性(沒必要要的): 設計中包含有重複的結構,而該重複的結構本可使用單一的抽象進行統一。 7.晦澀性: 很難閱讀、理解。沒有很好地表現出意圖。blog
11種原則 - Principle 繼承
----類原則 接口
1.單一職責原則 - Single Responsibility Principle(SRP)ip
就一個類而言,應該僅有一個引發它變化的緣由。ci
(職責即爲「變化的緣由」。)
2.開放-封閉原則 - Open Close Principle(OCP)
軟件實體(類、模塊、函數等)應該是能夠擴展的,可是不可修改。
(對於擴展是開放的,對於更改是封閉的.
關鍵是抽象.將一個功能的通用部分和實現細節部分清晰的分離開來.
開發人員應該僅僅對程序中呈現出頻繁變化的那些部分做出抽象.
拒毫不成熟的抽象和抽象自己同樣重要. )
3.里氏替換原則 - Liskov Substitution Principle(LSP)
子類型(subclass)必須可以替換掉它們的基類型(superclass)。
4.依賴倒置原則(IoCP) 或 依賴注入原則 - Dependence Inversion Principle(DIP)
抽象不該該依賴於細節。細節應該依賴於抽象。
(Hollywood原則: "Don't call us, we'll call you".
程序中全部的依賴關係都應該終止於抽象類和接口。
針對接口而非實現編程。
任何變量都不該該持有一個指向具體類的指針或引用。
任何類都不該該從具體類派生。
任何方法都不該該覆寫他的任何基類中的已經實現了的方法。)
5.接口隔離原則(ISP)
不該該強迫客戶依賴於它們不用的方法。
接口屬於客戶,不屬於它所在的類層次結構。
(多個面向特定用戶的接口勝於一個通用接口。)
----包內聚原則
6.重用發佈等價原則(REP)
重用的粒度就是發佈的粒度。
7.共同封閉原則(CCP)
包中的全部類對於同一類性質的變化應該是共同封閉的。
一個變化若對一個包產生影響,
則將對該包中的全部類產生影響,
而對於其餘的包不形成任何影響。
8.共同重用原則(CRP)
一個包中的全部類應該是共同重用的。
若是重用了包中的一個類,
那麼就要重用包中的全部類。
(相互之間沒有緊密聯繫的類不該該在同一個包中。)
----包耦合原則
9.無環依賴原則(ADP)
在包的依賴關係圖中不容許存在環。
10.穩定依賴原則(SDP)
朝着穩定的方向進行依賴。
應該把封裝系統高層設計的軟件(好比抽象類)放進穩定的包中,
不穩定的包中應該只包含那些極可能會改變的軟件(好比具體類)。
11.穩定抽象原則(SAP)
包的抽象程度應該和其穩定程度一致。
(一個穩定的包應該也是抽象的,一個不穩定的包應該是抽象的. )
----其它擴展原則----
12.BBP(Black Box Principle)黑盒原則
多用類的聚合,少用類的繼承。
13.DAP(Default Abstraction Principle)缺省抽象原則
在接口和實現接口的類之間引入一個抽象類,這個類實現了接口的大部分操做.
14.IDP(Interface Design Principle)接口設計原則
規劃一個接口而不是實現一個接口。
15.DCSP(Don't Concrete Supperclass Principle)不要構造具體的超類原則
避免維護具體的超類。
16.迪米特法則 一個類只依賴其觸手可得的類。