物件導向的設計,我們通常會涉及到兩個元素:介面,類,及他們之間的協作關係。
對於介面的設計:需要考慮介面隔離原則
對於類的設計:需要考慮類本身的設計,需要考慮類的職責是否單一(單一職責原則
);對於有繼承關係的類設計,要注意子類是否改變父類的方法,目標是不要改變,子類應該只擴充套件父類的行為(
黎克特制替換原則,開閉原則
),這樣才能把將來子類變化時產生的影響縮小到最小的範圍。
對於協作關係的設計:做頂層的框架設計時,協作應該是介面之間發生關係,介面之間的呼叫(
依賴倒置原則
),當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設計原則 依賴倒置原則
高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。高層模組主要負責複雜的業務邏輯,低層模組主要負責基本的原子操作。高層模組本來依賴低層模組,只有依賴低層模組,才能使用低層模組的功能。那為什麼說高層模組不應該依賴低層模組?不是很奇怪嗎?其實應該這樣說,高層模組不應...