1. 程式人生 > >6大基本設計原則

6大基本設計原則

摘要:瞭解設計模式的朋友們,想必都聽說過“六大設計原則”吧。其實最經典的 23 種設計模式中或多或少地都在使用這些設計原則,也就是說,設計模式是站在設計原則的基礎之上的。所以在學習設計模式之前,很有必要對這些設計原則先做一下了解。
在這裡插入圖片描述

一、單一職責原則

參考:Liuwei-Sunny 面向物件設計原則之單一職責原則

定義:一個類只負責一個功能領域中的相應職責。

理解:不同的類具備不同的職責,各司其職。做系統設計是,如果發現有一個類擁有了兩種職責,那麼就要問一個問題:可以將這個類分成兩個類嗎?如果真的有必要,那就分開,千萬不要讓一個類乾的事情太多。

總結:一個類只承擔一個職責

二、開放封閉原則

參考:Liuwei-Sunny 面向物件設計原則之開放封閉原則

定義:一個軟體實體(可以指一個軟體模組、一個由多個類組成的區域性結構或一個獨立的類)應當對擴充套件開放,對修改關閉。即軟體實體應儘量在不修改原有程式碼的情況下進行擴充套件。

理解:類、模組、函式,可以去擴充套件,但不要去修改。如果要修改程式碼,儘量用繼承或組合的方式來擴充套件類的功能,而不是直接修改類的程式碼。

總結:對軟體實體的改動,最好用擴充套件而非修改的方式。

三、里氏替換原則

參考:Liuwei-Sunny 面向物件設計原則之里氏替換原則

定義:所有引用基類(父類)的地方必須能透明地使用其子類的物件。

理解:父類可被子類替換,但反之不一定成立。也就是說,程式碼中可以將父類全部替換為子類,程式不會出現異常,但反過來就不一定了。

總結:在繼承類是,務必重寫(override)父類中所有的方法,尤其需要注意父類的protected方法(它們往往是讓你重寫的),子類儘量不要暴露自己的public方法供外界呼叫。

四、依賴倒置原則

參考:Liuwei-Sunny 面向物件設計原則之依賴倒置原則

定義:抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對介面程式設計,而不是針對實現程式設計。

理解:高層模組不應該依賴於底層模組,而應該依賴於抽象。抽象不應依賴於細節,細節應依賴於抽象。應該面向介面程式設計,不該面向實現類程式設計。面向實現類程式設計相當於就事論事,那是正向依賴;面向介面程式設計,相當於透過現象看本質,抓住事務的共性,那就是反向依賴,即依賴倒置。

總結:面向介面程式設計,提取出事務的本質和共性。

五、介面隔離原則

參考:Liuwei-Sunny 面向物件設計原則之介面隔離原則

定義:使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不需要的介面。

理解:不要對外暴露沒有實際意義的介面。也就是說,儘量保證介面的實用性。當需要對外暴露介面時,需要再三斟酌,若沒必要對外提供就刪了吧,因為一旦提供了就意味著,將來要多做一件事情,何苦給自己找事做呢。

總結:不要對外暴露沒有實際意義的介面。

六、迪米特法則

參考:Liuwei-Sunny 面向物件設計原則之迪米特法則

定義:迪米特法則又稱為最少知識原則,一個軟體實體應當儘可能少地與其他實體發生相互作用。

理解:儘量減少物件之間的互動,從而減小類之間的耦合。在做系統設計時,不要讓一個類依賴於太多其他的類,需儘量減小依賴關係,否則死都不知道怎麼死的。

總結:一定要做到:低耦合、高內聚。