設計模式——7大設計原則
一.七大設計原則
Single Responsibility Principle : 單一職責原則(SRP)
Open Closed Principle : 開閉原則(OCP)
Liskov Substitution Principle : 里氏替換原則(LSP)
Dependence Inversion Principle : 依賴倒置原則(DIP)
Interface Segregation Principle : 介面隔離原則(ISP)
Law of Demeter : 迪米特法則(LOD)(也叫最少知識原則LKP)
Composite/Aggregation Reuse Principle : 合成/聚合複用原則(CARP)
二.對於各原則理解
1.單一職責原則:
概念:就一個類而言,應該僅有一個引起它變化的原因。
理解:軟體設計就是發現職責並把職責相互分離,明確類的職責,一個類應只具有唯一職責。如果一個類職責過多,會產生職責耦合,當一個職責變化可能會影響其他,從而出現意外。單個類負責太多的功能實現,會導致類難以維護,也不容易瞭解該類的主要功能,最後可能讓整個專案過度依賴這個類,使得專案或這個類失去彈性。
2.開放—封閉原則:
概念:軟體實體應該可以擴充套件,但是不可修改。
理解:對於擴充套件是開放的,對於更改是封閉的。面對需求對於程式的修改時通過增加新的程式碼實現,而不是更改現有的程式碼。這就需要先猜測出最有可能發生變化的種類,然後構造抽象來隔離那些變化,即對程式中呈現出頻繁變化的那些部分做出抽象,利用抽象應對變化。系統分析時就要朝向“功能介面化”的方向進行設計,將系統功能的“操作方法”向上提升,抽象化為”介面“,將“功能的實現”向下移動子類中。因此,在面對增加系統功能需求時,就可以使用“增加子類”的方式來滿足。
3.里氏替換原則:
概念:子型別必須能夠替換掉他們的父型別。
理解:程式中子類可以替換父類,並且不影響程式執行。父類能夠被子類複用,而且子類可以在父類的基礎上增加新的行為。正是由於子型別的可替換行才使得父型別的模組在無需修改情況下就可以擴充套件。父類中一定包含了可被子類重新實現的方法,而客戶端使用的操作介面也是由父類來定義的,使用哪個子類的物件來替代父類物件,則由類本身的物件產生機制來決定,客戶端不應該知道。
4.依賴倒置原則:
概念:A.高層模組不應該依賴於底層模組。兩個都應該依賴抽象。B.抽象不應該依賴細節,細節應該依賴抽象。
理解:針對介面(抽象)程式設計,不要對實現(細節)程式設計。高層模組和低層模組都要依賴與抽象,即介面或抽象類。
5.介面隔離原則:
概念:使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不要的介面。
理解:儘量使用專門的介面,外界用到哪個呼叫哪個就好,不要把所有介面糅合在一起。
6.迪米特法則:
概念:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果一個類需要呼叫另外一個類的某一個方法的話,可以通過第三者轉發這個呼叫。
理解:強調了類之間的鬆耦合,類之間耦合越弱越有利於複用。一個處在弱耦合的類被修改,不會對有關係的類造成波及。
7.合成/聚合複用原則:
概念:儘量使用合成/聚合,儘量不要使用類繼承。
理解:優先使用合成/聚合,可以避免由於類繼承帶來的系統過於複雜龐大。