java面向對象設計原則之開閉原則示例解析

概念

唯一不變的是不斷的變化,在軟件開發中應該對需求的變化持開放態度,我們要做的就是如何將這種變化對我們現有的成果帶來最小的沖擊。開閉原則直接面對面向對象程序的目標擴展性和可維護性,要求對擴展開放,對修改關閉;即在不修改原有代碼的情況下改變模塊的行為。該原則是面向對象程序設計的總原則,也是度量程序設計的好與壞的唯一標準

實現

開閉原則的實現策略主要在面向對象的封裝性和多態性的基礎上,利用面向對象的其他原則完成的。

1.使用多態機制解決問題。

如:遠程監控系統使用數據傳輸使用427版本的協議,一年以後對427版本的協議進行瞭修正。設計時應該考慮的數據傳輸協議的可變性,抽象出具有報文解譯、編制、校驗等所有版本協議使用的通用方法,調用方針對接口進行編程即可,如上述示例設計類圖如下:

在這裡插入圖片描述

調用方依賴於報文接口,報文接口是穩定的,而不針對具體的427協議或427修正協議。利用接口多態技術,實現瞭開閉原則。除使用接口實現多態外,還可以使用繼承機制重置實現多態來完成,如:某一實現過程包括獲取數據、數據處理、數據存儲,其中獲取數據和存取數據不變,數據處理過程發生變化,則可以在子類中使用重置機制將數據處理方法進行重寫。使用多態技術實現的方式,均不修改原有代碼,隻是增加一份新的實現類,完成瞭開閉原則。

2.降低耦合度, 將變化的代碼降到最低

如:系統界面上按鈕控件為方形按鈕,現在領導要求把所有的按鈕換成圓角按鈕,如何辦?
使用迪米特法則,在使用按鈕控件時,給其包外圍一層,增加一個按鈕包裝類,使得界面與按鈕控件脫耦,修改時隻需修改包裝器類即可。其類圖如下:

在這裡插入圖片描述

3. 遵循單一職責原則

職責越單一,封裝性越好,“開閉原則”越容易實現。

拓展

1.註意分支語句的使用。分支語句破壞開閉原則,當條件發生變化時,我們不得不修改代碼。解決辦法依然是使用多態機制,每個分支使用不同實現類,來解決問題。
2. 避免過度設計
百分之百的開閉原則很難達到,但要盡量符合開閉原則。在設計時對於將來可能會發生變化的部分實現面向接口的編程,同時對不可能或極小概率發生變化時的應該避免過度設計而造成的復雜性。

以上就是java面向對象設計原則之開閉原則示例解析的詳細內容,更多關於java面向對象設計原則的資料請關註WalkonNet其它相關文章!

推薦閱讀: