Java設計原則

2021-08-13 22:23:17 字數 3199 閱讀 2546

物件導向的設計,我們通常會涉及到兩個元素:介面,類,及他們之間的協作關係。

對於介面的設計:需要考慮介面隔離原則

對於類的設計:需要考慮類本身的設計,需要考慮類的職責是否單一(單一職責原則

);對於有繼承關係的類設計,要注意子類是否改變父類的方法,目標是不要改變,子類應該只擴充套件父類的行為(

黎克特制替換原則,開閉原則

),這樣才能把將來子類變化時產生的影響縮小到最小的範圍。

對於協作關係的設計:做頂層的框架設計時,協作應該是介面之間發生關係,介面之間的呼叫(

依賴倒置原則

),當1個類需要和 其他類發生呼叫關係時,可以考慮增加1個中間者來**呼叫關係(

迪公尺特法則

,不常用

),縮小類更變影響的範圍。

單一職責原則(single responsibility principle)

定義:

乙個類只負責乙個功能領域的職責;換句話說,就乙個類而言,應該只有乙個引起它變化的原因。

注意:

例子:

重構前:

重構後:

開閉原則(open-closed principle)

定義:

軟體實體應該對擴充套件開放,對修改關閉。

注意:

例子:

重構前:

重構後:

黎克特制代換原則(liskov substitution principle)

定義:

所有引用基類(父類)的地方必需能夠透明地使用子類物件。

注意:

例子:

重構前:

重構後:

定義:

抽象不依賴於細節,細節依賴於抽象,針對介面程式設計。

注意:

參考資料:

深入理解依賴注入

例子:

重構前:

重構後:

定義:

使用多個專門的介面,而不是使用功能複雜的單一介面。

注意:

例子:

重構前:

重構後:

合成復用原則(composite resuse principle)

定義:

又稱為組合/聚合復用原則(composition/aggregate reuse pinciple),盡量使用物件組合,而不是繼承來達到復用的目的。

① 優點:新物件訪問成分物件的唯一方法是通過成分物件的介面;這種復用是黑箱復用,因為成分物件的內部細節是新物件所看不見的;這種復用支援包裝;

這種復用所需的依賴較少;

每乙個新的類可以將焦點集中在乙個任務上;

這種復用可以在執行時動態進行,新物件可以使用合成/聚合關係將新的責任委派到合適的物件。

② 缺點:

通過這種方式復用建造的系統會有較多的物件需要管理。

繼承復用

① 優點:

新的實現較為容易,因為基類的大部分功能可以通過繼承關係自動進入派生類;

修改或擴充套件繼承而來的實現較為容易。

② 缺點:

繼承復用破壞包裝,因為繼承將基類的實現細節暴露給派生類,這種復用也稱為白箱復用;如果基類的實現發生改變,那麼派生類的實現也不得不發生改變;從基類繼承而來的實現是靜態的,不可能在執行時發生改變,不夠靈活。

注意:例子:重構前:

重構後:

迪公尺特法則

定義:

乙個軟體實體應當盡可能少地與其它實體發生相互作用。

注意:

例子:

重構前:

重構後:

Java 設計原則

1.開 閉 原則 open close principle 乙個軟體實體應該對擴充套件開放,對修改關閉。software entities should be open for extension,but closed for modification.優越性 1 通過擴充套件已有的軟體體統,可以提...

java設計模式 設計原則

開閉原則也就是說對擴充套件開放,對修改關閉,在程式需要進行業務拓展的時候,不能修改程式原有的 體系,而是選擇以擴充套件的原則,實現乙個熱拔插的效果。用 來說,就是在開發過程中,我們更多的應該使用介面和抽象類。不要存在多於乙個導致類變更的原因,也就是說每個類都應該實現單一的職責,如若不然,就應該把類拆...

Java設計原則 依賴倒置原則

高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。高層模組主要負責複雜的業務邏輯,低層模組主要負責基本的原子操作。高層模組本來依賴低層模組,只有依賴低層模組,才能使用低層模組的功能。那為什麼說高層模組不應該依賴低層模組?不是很奇怪嗎?其實應該這樣說,高層模組不應...