1.Java軟件架構設計原則


七大設計原則

一.開閉原則

開閉原則(Open-Closed Principle, OCP)是指一個軟件實體(如類、模塊和函數)應該對擴展開放,對修改關閉。所謂的開閉,也正是對擴展和修改兩個行為的一個原則。它強調的是用抽象構建框架,用實現擴展細節,可以提高軟件系統的可復用性及可維護性。開閉原則是面向對象設計中最基礎的設計原則,它指導我們如何建立穩定、靈活的系統。例如版本更新,我們盡可能不修改源代碼,但是可以增加新功能。

二.依賴倒置原則

依賴倒置原則(Dependence Inversion Principle, DIP)是指設計代碼結構時,高層模塊不應該依賴底層模塊,二者都應該依賴其抽象。抽象不應該依賴細節,細節應該依賴抽象。通過依賴倒置,可以減少類與類之間的耦合性,提高系統的穩定性,提高代碼的可讀性和可維護性,並且能夠降低修改程序所造成的風險。

三.單一職責原則

單一職責原則(Simple Responsibility Pinciple, SRP)是指不要存在多於一個導致類變更的原因。假設我們有一個類負責兩個職責,一旦發生需求變更,修改其中一個職責的邏輯代碼,有可能導致另一個職責的功能發生故障。這樣一來,這個類就存在兩個導致類變更的原因。如何解決這個問題呢?將兩個職責用兩個類來實現,進行解耦。后期需求變更維護互不影響。這樣的設計可以降低類的復雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險。總體來說,就是一個類、接口或方法只負責一項職責。

四.接口隔離原則

接口隔離原則(Interface Segregation Principle, ISP)是指用多個專門的接口,而不使用單一的總接口,客戶端不應該依賴它不需要的接口。

這個原則指導我們在設計接口時應當注意以下幾點:

(1)一個類對另一個類的依賴應該建立在最小的接口之上。

(2)建立單一接口,不要建立龐大臃腫的接口。

(3)盡量細化接口,接口中的方法盡量少(不是越少越好,一定要適度)。

接口隔離原則符合我們常說的高內聚、低耦合的設計思想,可以使類具有很好的可讀性、可擴展性和可維護性。我們在設計接口的時候,要多花時間去思考,要考慮業務模型,包括對以后有可能發生變更的地方還要做一些預判。所以,對於抽象、對於業務模型的理解是非常重要的。

五.迪米特原則

迪米特原則(Law ofDemeter LoD)是指一個對象應該對其他對象保持最少的了解,又叫最少知道原則(Least Knowledge Principle, LKP),盡量降低類與類之間的耦合度。迪米特原則主要強調:之和朋友交流,不和陌生人說話。出現在成員變量、方法輸入、輸出參數中的類都可以稱為成員朋友類,而出現在方法體內部的類不屬於朋友類。

六.里氏替換原則

里氏替換原則(Liskov Substitution Principle, LSP)是指如果對每一個類型為T1的對象O1,都有類型為T2的對象O2,使得以T1定義的所有程序P在所有的對象O1都替換成O2時,程序P的行為沒有發生變化,那么類型T2是類型T1的子類型。

這個定義看上去還是比較抽象的,我們重新理解一下。可以理解為一個軟件實體如果適用於一個父類,那么一定適用於其子類,所有引用父類的地方必須能透明的使用其子類的對象,子類對象能夠替換父類對象,而程序邏輯不變。

根據這個理解,引申含義為:子類可以擴張父類的功能,但不能改變父類的原有功能。

(1)子類可以試想父類的抽象方法,但不能覆蓋父類的非抽象方法。

(2)子類可以增加自己特有的方法。

(3)當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入參數更寬松。

(4)當子類的方法實現父類的方法時(重寫/重載或實現抽象方法),方法的后置條件(即方法的輸出/返回值)要比父類更嚴格或與父類一樣

使用里氏替換原則的優點:

(1)約束繼承泛濫,是開閉原則的一種體現

(2)加強程序的健壯性,同時變更時也可以做到非常好的兼容性,提高程序的可維護性和擴展性,降低需求變更時引入的風險。

七.合成復用原則

合成復用原則(Composite/Aggregate Reuse Principle, CARP)是指盡量使用對象組合(has-a)/聚合(contanis-a)而不是繼承關系達到軟件復用的目的。可以使系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM