| 設計原則名稱 |
設計原則簡介 |
重要性 |
| 單一職責原則 |
類的職責要單一,不能將太多的職責放在一個類中 |
★★★★☆ |
| 開閉原則 |
軟件實體對擴展是開放的,但對修改是關閉的,即在不修改一 個軟件實體的基礎上去擴展其功能 |
★★★★★ |
| 里氏代換原則 |
在軟件系統中,一個可以接受基類對象的地方必然可以接受一 個子類對象 |
★★★★☆ |
| 依賴倒轉原則 |
要針對抽象層編程,而不要針對具體類編程 |
★★★★★ |
| 接口隔離原則 |
使用多個專門的接口來取代一個統一的接口 |
★★☆☆☆ |
| 合成復用原則 |
在系統中應該盡量多使用組合和聚合關聯關系,盡量少使用甚 至不使用繼承關系 |
★★★★☆ |
| 迪米特法則 |
一個軟件實體對其他實體的引用越少越好,或者說如果兩個類 不必彼此直接通信,那么這兩個類就不應當發生直接的相互作 用,而是通過引入一個第三者發生間接交互 |
★★★☆☆ |
1.單一職責原則
(Single Responsibility Principle, SRP)定義如下:
一個對象應該只包含單一的職責,並且該職責被完整地封裝在一個類中。
另一種定義方式如下:
就一個類而言,應該僅有一個引起它變化的原因。
2.開閉原則
(Open-Closed Principle, OCP)定義如下:
一個軟件實體應當對擴展開放,對修改關閉。也就是說在設計一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展,即實現在不修改源代碼的情況下改變這個模塊的行為。
3.里氏代換原則定義
所有引用基類(父類)的地方必須能透明地使用其子類的對象。
4.依賴倒轉原則
(Dependence Inversion Principle, DIP)的定義如下:
高層模塊不應該依賴低層模塊,它們都應該依賴抽象。抽象不應該依賴於細節,細節應該依賴於抽象。
另一種定義方式如下:
要針對接口編程,不要針對實現編程。
5.接口隔離原則定義
接口隔離原則(Interface Segregation Principle, ISP)的定義如下:
- 客戶端不應該依賴那些它不需要的接口。
另一種定義方法如下:
- 一旦一個接口太大,則需要將它分割成一些更細小的接口,使用該接口的客戶端僅需知道與之相關的方法即可。
6.合成復用原則
(Composite Reuse Principle, CRP)又稱為組合/聚合復用原則(Composition/ Aggregate Reuse Principle, CARP),其定義如下:
盡量使用對象組合,而不是繼承來達到復用的目的。
7.迪米特法則
(Law of Demeter, LoD)又稱為最少知識原則(Least Knowledge Principle, LKP)
它有多種定義方法,其中幾種典型定義如下:
(1) 不要和“陌生人”說話。英文定義為:Don't talk to strangers.
(2) 只與你的直接朋友通信。英文定義為:Talk only to your immediate friends.
(3) 每一個軟件單位對其他的單位都只有最少的知識,而且局限於那些與本單位密切相關的軟件單位。英文定義為:Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.
