s.o.l.i.d是物件導向設計和程式設計(ood&oop)中幾個重要編碼原則(programming priciple)的首字母縮寫,是敏捷開發以及自適應軟體開發的基本原則的重要組成部分。
簡寫全拼
中文翻譯
srpthe single responsibility principle
單一職責原則
ocpthe open closed principle
開放封閉原則
lspthe liskov substitution principle
黎克特制替換原則
ispthe inte***ce segregation principle
介面分離原則
dipthe dependency inversion principle
依賴倒置原則
乙個類應該只有乙個引起變化的原因。如果有乙個類具有兩個改變的原因,那會使得該類變化的概率上公升,當需要改變這個類時,你的設計中同時有兩個方面將會受到影響。盡量讓每乙個類保持單一責任。
內聚是乙個比單一職責原則更寬泛的概念,當乙個模組或乙個類被設計成只支援一組相關功能時,我們說它具有高內聚。
類應該對擴充套件開放,對修改關閉。當需求有改動時,在不改變現有**的情況下,盡量用繼承或組合的方式來擴充套件類的功能,來應對改變的需求。
遵循開-閉原則通常會引入新的抽象層次,增加**的複雜度。在選擇需要擴充套件的**部分時需要小心。為了讓你的設計簡單而且有彈性,我們應恰到好處的遵循開-閉原則。
觀察者模式、裝飾者模式就是遵循開-閉原則的好例子。
子類物件必須能夠替換掉所有父類物件。只要父類出現的地方子類就可以出現,且替換成子類也不會出現任何錯誤或者異常。(但是反過來,有子類出現的地方,父類不一定可以適用)。
黎克特制替換原則為繼承定義了四個規範:
不能強迫使用者去依賴那些他們不使用的介面。換句話說,使用多個專門的介面比使用單一、寬泛用途的介面要好。
要依賴抽象,不要依賴具體類。高層元件不應該依賴於低層元件,二者都應該依賴於抽象;抽象不應該依賴於細節,細節應該依賴於抽象。
除了上述的經典原則,在實際開發中還有下面這些常見的設計原則。
簡寫全拼
中文翻譯
lkpleast knowledge principle
最少知識原則
crpthe composite reuse principle
合成復用原則
hpthe hollywood principle
好萊塢原則
ccpthe common closure principle
共同封閉原則
sapthe stable abstractions principle
穩定抽象原則
sdpthe stable dependencies principle
穩定依賴原則
乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。最少知識原則又叫迪公尺特法則(
law of demeter
),這個原則希望我們在設計中,不要讓太多的類耦合在一起,免得修改系統的一部分,會影響到其他部分。門面模式(facade)和中介者模式(mediator),都是迪公尺特法則應用的例子
在軟體復用時,要盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。合成復用原則又叫組合/聚合復用原則(composition/aggregate reuse principle,carp)。合成復用原則同黎克特制替換原則相輔相成的,兩者都是開閉原則的具體實現規範。
別呼叫(打**給)我們,我們會呼叫(打**給)你。在好萊塢原則下,允許低層元件將自己掛鉤到系統上,但是由高層元件決定什麼時候和以什麼樣的形式呼叫低層元件。換句話說,低層不應應呼叫高層,只有高層去呼叫低層,這樣可以避免「依賴腐敗」。
依賴腐敗:當高層元件依賴低層元件,而低層元件又依賴於高層元件,高層元件又依賴於邊側元件,而邊側元件又易拉與低層元件時,依賴腐敗就發生了: 很難理解系統是如何設計的。
模板方法模式、ioc原理都體現了好萊塢原則。
一起修改的類,應該組合在一起(同乙個包裡)。如果必須修改應用程式裡的**,我們希望所有的修改都發生在乙個包裡(修改關閉),而不是遍布在很多包裡。
最穩定的包應該是最抽象的包,不穩定的包應該是具體的包,即包的抽象程度跟它的穩定性成正比。
包之間的依賴關係都應該是穩定方向依賴的,包要依賴的包要比自己更具有穩定性。
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...
物件導向設計原則
物件設計原則 物件導向設計原則 物件導向設計的基石是 開 閉 原則。開一閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。從另外乙個角度講,就是所謂的 對可變性封裝原則 對可變性封裝原則 意味著兩點 1 ...
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...