設計模式的六大原則

1.開閉原則(Open Close Principle)

對擴展開放,對修改關閉;想要達到這種效果,需要使用接口和抽象類.

開閉原則對擴展開放,對修改關閉,並不意味着不做任何修改,低層模塊的變更,必然要有高層模塊進行耦合,否則就是一個孤立無意義的代碼片段.

2.里氏代換原則(Liskov Substitution Principle)

所有引用基類(父類)的地方必須能夠透明的使用其子類的對象;(通俗定義)
里氏代換原則告訴我們:在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立,如果一個軟件實體使用的是
一個子類對象的話,那麼她不一定能夠使用基類對象.例:
我喜歡動物,那我肯定喜歡狗;但是我喜歡狗,並不能斷定我喜歡動物;因爲我不喜歡貓,雖然它也是動物.
因此 程序中儘量使用基類類型來定義對象,而在運行時在確定其子類類型,用子類來代替父類對象;如 Animal dog = new Dog();

  • 子類必須完全實現父類的方法;
    在類中調用其他類時務必要使用父類或者接口,如果不能使用父類或者接口,則說明類的設計已經違背了LSP原則(里氏代換原則)
  • 子類可以有自己的個性
    向下轉型(downcast)是不安全的,就是有子類出現的地方父類不一定就可以出現
  • 覆蓋或者實現父類的方法時輸入參數可以被放大

  • 覆寫或實現父類的方法時輸出結果可以被縮小

3.依賴倒轉原則(dependence Inversion principle)

High level modules should not depend up on low level modules;
Both should depend on abstractions.
Abastractions should not depend up on details.
Details should depend up on abstractions.
高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象;
抽象不應該依賴細節;
細節應該依賴抽象;

開閉原則的基礎,具體內容:對接口編程,依賴於抽象而不依賴具體. 核心思想是 面向接口編程.
高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象.
例:媽媽給孩子講故事,給她一本書就可以講故事,如果媽媽依賴的書,則後期如果加入報紙,雜誌,媽媽則無法讀取其內容;
這樣就需要修改成 媽媽依賴讀物的接口,書 報紙和雜誌等實現讀物的接口,媽媽直接調用讀物的實現類.
依賴倒置原則基於這樣一個事實:相對於細節的多變性,抽象的東西要穩定的多.以抽象爲基礎搭建起來的架構比以細節爲基礎搭建起來的架構要穩定的多.
在java中,抽象指的是接口或者抽象類,細節就是具體的實現類,使用接口或者抽象類的目的是制定好規範和契約,而不去涉及任何具體的操作,把展現細節的
任務交給他們的實現類去完成

4.接口隔離原則(Interface Segregation Principle)

使用多個隔離的接口,比使用單個接口要好.可以方便升級和維護.降低依賴,降低耦合.
衡量規則:
4.1 一個接口只服務於一個子模塊或者業務邏輯
4.2 通過業務邏輯壓縮接口中的public方法;
4.3 已經被污染的接口,儘量去修改;若變更的風險較大,則採用適配器模式進行轉化處理;
4.4 瞭解環境,拒絕盲從;

5.迪米特法則(最少知道原則)(Demeter Principle)

一個實體應該儘量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立.

迪米特法則的核心觀念就是類間解耦,弱耦合,只有弱耦合了以後,類的複用率纔可以提高.其要求的結果
就是產生了大量的中轉或者跳轉類,導致系統的複雜性提高,同時也爲維護帶來了難度.所以,在採用迪米特法則時需要反覆權衡,既要做到結構清晰,又要做到高內聚低耦合.

6.合成複用原則(Composite Reuse Principle)

儘量使用 合成/聚合的方式,而不是使用繼承.

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