OO設計基本原則

2022-04-23 10:36:22 字數 1570 閱讀 1941

※單一職責原則:就乙個類而言,應該僅有乙個引起它變化的原因。

單一是乙個類的優良設計。交雜不清的職責將使得**看起來特別彆扭牽一髮而動全身,

有失美感和必然導致醜陋的系統錯誤風險。

※開放封閉原則:是說軟體實體(類、模組、函式等等)應該可以擴充套件但不可修改。

實現開開放封閉原則的核心思想就是對抽象程式設計,而不對具體程式設計,因為抽象相對穩定。

讓類依賴於固定的抽象,所以修改就是封閉的;而通過物件導向的繼承和多型機制,

又可以實現對抽象類的繼承,通過覆寫其方法來改變固有行為,實現新的拓展方法,所以就是開放的。

「需求總是變化」沒有不變的軟體,所以就需要用封閉開放原則來封閉變化滿足需求,

同時還能保持軟體內部的封裝體系穩定,不被需求的變化影響。

※依賴倒置原則:依賴抽象,不要依賴具體。

抽 象的穩定性決定了系統的穩定性,因為抽象是不變的,依賴於抽象是物件導向設計的精髓,

也是依賴倒置原則的核心。依賴於抽象是乙個通用的原則,而某些時候依 賴於細節則是在所難免的,

必須權衡在抽象和具體之間的取捨,方法不是一層不變的。依賴於抽象,就是對介面程式設計,不要對實現程式設計。

※黎克特制代換原則:子型別必須能夠替換到他們的父型別。

liskov 替換原則,主要著眼於對抽象和多型建立在繼承的基礎上,因此只有遵循了liskov替換原則,

才能保證繼承復用是可靠地。實現的方法是面向介面程式設計:將公 共部分抽象為基類介面或抽象類,

通過extractabstractclass,在子類中通過覆寫父類的方法實現新的方式支援同樣的職責。liskov替 換原則能夠

保證系統具有良好的拓展性,同時實現基於多型的抽象機制,能夠減少**冗餘,避免執行期的型別判別。

※介面隔離原則:多個和客戶相關的介面要好於乙個通用介面。

分離的手段主要有以下兩種:1、委託分離,通過增加乙個新的型別來委託客戶的請求,隔離客戶和介面的直接依賴,

但是會增加系統的開銷。2、多重繼承分離,通過介面多繼承來實現客戶的需求,這種方式是較好的。

下邊是前面沒有提到過的兩個原則,也是設計時要考慮的重要原則。

※迪公尺特法則:不相互直接通訊的類之間,不要直接發生相互作用。

如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果乙個類需要呼叫領乙個類的

某個方法話,可以通過第三者**這個呼叫。迪公尺特法則首先強調的前提是在類的設計上,每一類都應當盡量

降低成員的訪問許可權。它的根本思想是強調類之間的松耦合。

※合成/聚合復用原則:盡量使用合成/聚合,盡量不要使用繼承。

合 成(composition)和聚合(aggregation)都是關聯的特殊種類,聚合表示一種弱的擁有關係;

合成這是一種強的擁有關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣。

優先使用合成或聚合原則將有助於保持每個類被封裝,並被集中在單個任務上。這樣類和類繼承

層次會保持較小規 模,並且不太可能增長為不可控制的龐然大物。

設計模式基本原則

設計模式基本原則 開 閉 原則 open closed principle,或者ocp 原文 software entities should be open for extension,but closed for modification.解釋 乙個軟體實體應當對擴充套件開放,對修改關閉。黎克特...

設計模式基本原則

1 單一職責原則 類的職責要單一 不要將太多的職責放到同乙個類當中去。eg 資料結構職責類和演算法行為都放在乙個類。我們應該把資料結構和行為分開。2 開閉原則 乙個軟體實體應該對擴充套件開放,對修改關閉。可變性封裝 3 黎克特制代換原則 可以接受基類物件的地方必然要可以接受子類的物件。4 依賴倒轉原...

設計模式基本原則

設計模式基本原則 開 閉 原則 open closed principle,或者ocp 原文 software entities should be open for extension,but closed for modification.解釋 乙個軟體實體應當對擴充套件開放,對修改關閉。黎克特...