設計模式中的六大原則
一、單一職責原則
1、
單一職責原則(SingleResponsibilityPrinciple,SRP),就一個類而言,只有一個原因可引起它的變化。
2、描述
類承擔的責任過多=把責任耦合在一起,可能會牽一髮而動全身,導致類無法完成其他的責任。這種高耦合會導致脆弱的設計,遭到意想不到的破壞。(中介模式中的,聯合國和各個國家的關係)。
3、單一職責原則會給編程帶來那些效果
做到單一職責,會使代碼易維護,易擴充,易複用,靈活多樣。
4、什麼情況下可考慮職責分離
一個類賦予多個動機的時候,此類承擔多個職責,就應該考慮職責分離。(軟體設計做的許多工作,就是發現職責並分離職責)
5、應用
手機介面與遊戲邏輯分離,有朝一日改換介面時,遊戲本身,仍不受影響,可達到複用的效果。
二、開放-封閉原則
1、
開放-封閉原則(TheOpen-ClosedPrinciple,簡稱OCP),是說軟體實體(類、模組、函數等)應該可以擴充,但是不可修改。[ASD]
2、描述
做任何系統的時候,都不要指望系統一開始時確定了需求,就要求它不再改變了,那是不現實的。既然需求一定要變化,如何使設計的軟體可以相對容易修改,不至於新需求一來,整個程式推倒重來。怎樣的設計面對需求的改變卻可以保持相對穩定,開放-封閉原則給了我們答案。
3、開放-封閉原則會給編程帶來哪些效果
開放-封閉原則是物件導向設計的核心所在。帶來的巨大好處就是可維護性、可擴充性、可複用、靈活性好。
4、什麼情況下可考慮此原則
開發人員應該僅對程式中呈現出頻繁變化的哪些部分做出抽象,然而,對於應用程式中的每部分都刻意地進行抽象也不足取。拒絕不成熟的抽象和抽象本身同等重要。當需求改變,我們希望通過擴充滿足需求,而不是更改原來的代碼,需考慮此原則
5、應用
考研求職兩不誤;鄧小平的一國兩制
三、裡氏代換原則
1、
裡氏代換原則(Liskov SubstitutionPrinciple,LSP):子類型必須能夠替換掉它們的父類型。由於子類型的可替換性才使得父類類型的模組在無需修改的情況下可以擴充。
2、描述
裡氏代換原則通俗講:子類可以擴充父類的功能,但不能改變父類原有的功能。
一個軟體實體如果使用的是一個父類的話,那麼一定適用於子類,而且他察覺不出父類對象和子類對象的區別,也就是說,在軟體裡面,把其父類都替換成它的子類,程式的程式沒有變化。
3、裡氏代換原則會給編程帶來哪些效果
只有當子類替換掉父類,軟體單位的功能不受影響時,父類才能真正的被複用,兒子類,可以在父類的基礎上增添新的行為,正是有裡氏代換,使得繼承複用成為可能。正是由於子類的可替換性才是得父類中的模組在無需修改的情況下就可以擴充,不然何談擴充開放,修改關閉呢。
5、應用
如:在物件導向設計時,子類擁有父類所有非private的行為和屬性,鳥會飛,但企鵝不會飛,所以且不能繼承鳥類。
四、依賴倒轉原則
1、
依賴倒轉原則(Dependence InversionPrinciple):A.高層模組不應該依賴底層模組。兩個都應該依賴抽象。
B.抽象不應該依賴細節。細節應該依賴抽象。
2、描述
依賴倒轉原則的核心:面向介面編程,不要對實現編程。以電腦中的組件為例,無論主板、CUP、記憶體、硬碟都是在針對介面設計的,如果針對實現設計,記憶體就要對應到具體的某個品牌的主板,如果出現換記憶體需要把主板也換了的尷尬。這樣的話,損害任一組件都會造成整個主板的不可用。這樣的話就會損失慘重。如果採用介面呢,只要介面穩定,如果某組件壞了,就換上相應的組件,不會影響其他組件。依賴倒轉原則基於這樣一個事實:相對於細節的多變性抽象的東西要穩定的多。
3、依賴倒轉則會給編程帶來哪些效果
實現了高內聚低耦合,使得程式容易維護,易擴充,易複用,靈活多樣。
4、什麼情況下可考慮此原則
抽象依賴抽象等情況時,注意當使用繼承時應遵循裡氏代換原則。如果出現,抽象依賴具體,牽一髮而動全身等情況,就應該考慮此原則的運用。
5、應用
電腦中的硬體裝置,比如說cpu通過引腳與主板相連,記憶體條等等,都是採用介面的方式。
五、迪米特法則
1、
迪米特法則(Law Of Demeter),如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互關係。如果其中一個類需要調用另個類的某一方法的話,可以通過第三者轉寄這個調用。
2.描述
迪米特法則首先強調的前提是:在類的結構設計上,每一個類都應當盡量降低成員的存取權限。也就是說,一個類封裝好自己的Private狀態,不需要讓別人知道的欄位或行為就不要公開。若需要,則通過屬性來實現。
迪米特法則其根本思想,是強調了類之間的松耦合。
3、帶來的好處
類之間的耦合越弱,越有利於複用,一個處在弱耦合的類被修改,不會對有關係的類造成波及。體現,資訊的隱藏促進了軟體的複用。
4、簡單應用
找IT部修電腦,只需要找IT部負責人一切ok。不要找IT部中的某一具體的修理工。IT部就是抽象的。
六、合成/彙總複用原則
1、
合成/彙總複用原則(Composite/Aggregate
Reuse Principle,CARP),盡量使用合成/彙總,盡量不要使用類繼承。
2、描述
合成(Composition,也有翻譯成組合)和彙總(Aggregation)都是關聯的特殊種類。彙總表示一種,弱的“擁有”關係,體現的是A對象可以包含B對象,但B對象不是A的一部分;合成則是一種強的“擁有”,體現了嚴格的部分與整體的關係,部分和整體同時誕生,同時滅亡。
3、帶來的好處
將有助於你保持每個類被封裝,並集中在單個任務上。這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。
4、簡單應用
PC機是軟硬體的的組合的機器。