java设计模式之设计原则①开闭原则
定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
強調的是用抽象構建框架,用實現擴展細節。
優點:提高軟件系統的可復用性及可維護性
例如:
創建一個Course接口
獲取id方法
獲取name方法
獲取price方法
創建一個JavaCourse類實現Course接口
設置三個屬性
Integer id
String name
Double price
創建一個滿參的構造函數
修改重寫的三個方法的返回值
創建一個Test測試類
創建一個JavaCourse類,賦予屬性
直接輸出這個對象的屬性
可以在idea編輯器中右鍵包選擇
查看類圖關系
比如說現在有一個需求,關于價格有個打8折活動,我們在此基礎上在更改接口的話,所有的實現類中的方法都要重寫這個方法,如果實現類少的話還可以接受,但是我們的接口是不可以經常變化的,應該是穩定可靠的,否則這個作用也就失去了。
解決方案:我們在寫一個JavaDiscountCourse類去繼承JavaCourse類,然后去重寫父類的getPrice()價格方法,如下圖
修改test類 創建的是子類對象(new JavaDiscountCourse)
這樣就可以更好的去擴展并且展示出了打折后的價格
但是呢如果需要展示原價格的話又要怎么去做呢?
在子類中定義一個方法getOriginPrice() 去獲取原價格
但是我們發現在test中他調用不到定義的獲取原價格的方法
雖然定義的是public方法,當時因為我們在test類中使用父類聲明的引用,所以他拿不到public方法
所以我們需要將其類型進行強轉
這樣我們就可以調用定義的獲取原價格的方法了
類圖如下
總結:開閉原則在這里指的是 對于擴展是開放的,而對修改接口和基類是關閉的
我們變化的都是應用層的子模塊,越是底層(基礎)的模塊進行更改,變化(影響)是越大的,越是高層的模塊更改,變化 影響的范圍會越小。
簡單的理解:比如說我們的Dao層變化了,而這個Dao層被很多service使用,而在上層是controller,那這個影響就非常大,有可能我們為了改一個模塊影響到另一個模塊,所以說我們在面向對象編程的時候,一定強調開閉原則,其他原則也都是開閉原則的具體形態,提高了復用性和可維護性,因為我們在公司并不是一個人開發,我們要考慮軟件的維護成本。
總結
以上是生活随笔為你收集整理的java设计模式之设计原则①开闭原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 差分放大电路知识总结
- 下一篇: Cairo编程