面向對象程序的5大設計原則

1.單一職責原則(Single-Resposibility Principle)
定義:一個類只需要做好一件事,並且應該僅有一個引起它變化的原因
本原則是“高內聚、低耦合”在面向對象原則的引申,這裏的“職責”可以理解爲“引起變化的原因”,這樣大大的提高內聚性,如果職責過多,可能引起它變化的原因也越多,這會導致職責的相互影響,從而降低了內聚性。


2.開放封閉原則(Open-Closed Principle)
定義:軟件實體應該是可擴展的,而不可修改的。
本原則是所有原則的核心,緊緊圍繞着變化展開,它主要體現在兩個方面:
(i)對擴展開放,就意味着有新的需求和變化,可以對程序的現有代碼進行外部擴展。
(ii)對修改封閉,就意味着類的設計一旦設計完成,就可以獨立完成其工作,不需要對其修改。
實現開閉原則的主要思想是對抽象編程,而不是具體編程,因爲抽象比較穩定。這樣可以讓類依賴於固定的抽象,所以修改是封閉的;而通過面向對象的繼承和多態機制,又可以實現對抽象類的繼承,通過重寫其方法來改變固有行爲,實現新的拓展。


3.依賴倒置原則(Dependecy-Inversion Principle)
定義:抽象不依賴於具體,具體依賴於抽象
本原則的核心思想是:依賴於抽象,具體也就是高層模塊不依賴於底層模塊,二者都同依賴於抽象。抽象的穩定性決定了系統的穩定性,因爲抽象是不變的,依賴於抽象是面向對象設計的精髓,也是依賴倒置原則的核心。
依賴於抽象是一個通用的原則,而有時候依賴於細節是在所難免的,必須權衡在抽象和具體之間的取捨。依賴於接口,就是接口編程,不要對實現編程。


4.接口分離原則(Interface-Segregation Principle)
定義:多個專用接口優於一個單一的通用接口
本原則體現在,接口應該是內聚的,所以要避免“胖接口”,一個類對另外一個類的依賴應該建立在最小的接口上。
接口有效的將細節和抽象分離,接口分離強調接口的單一性,而胖接口存在着明顯的弊端,會導致實現的類型必須完全實現接口的所以方法、屬性等;但是有時候,實現類型並不需要所有的接口定義,在設計上就是浪費,在以後修改時,牽一髮而動全身,一種毀滅性的災難,在這種情況下,我們需要講胖接口分解爲多個特定的定製化方法,使得客戶端僅僅依賴於它們的實際調用的方法。
分離的方法:

(i)委託分離:通過增加一個新的類型來委託來委託客戶的請求,隔離客戶和接口的直接依賴,但是會增加系統的開銷

(ii)多重繼承分離,通過接口多繼承來實現來實現客戶的需求。


5.Liskov替換原則(Liskov-Substituion Principle)

定義:子類必須能夠替換掉它們的基本類

本原則和開放封閉原則關係密切,正是子類型的可替換性,才使得使用基類型模塊無需修改就可擴充。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章