- 重學Java設計模式
- 付政委(小付哥)
- 829字
- 2021-05-19 18:09:50
2.2 開閉原則
2.2.1 開閉原則定義
一般認為最早提出開閉原則(Open-Close Principle,OCP)的是伯特蘭·邁耶。他在1988 年發表的《面向對象軟件構造》中給出的。在面向對象編程領域中,開閉原則規定軟件中的對象、類、模塊和函數對擴展應該是開放的,但對于修改是封閉的。這意味著應該用抽象定義結構,用具體實現擴展細節,以此確保軟件系統開發和維護過程的可靠性。
開閉原則的核心思想也可以理解為面向抽象編程。
2.2.2 模擬場景
對于外部的調用方來說,只要能體現出面向抽象編程,定義出接口并實現其方法,即不修改原有方法體,只通過繼承方式進行擴展,都可以體現出開閉原則。
這里計算三種形狀的面積,如長方形、三角形、圓形,它們在類中已經按照固定的公式實現,其中圓形面積公式中π=3.14。但后續由于π值取的精度對于某些場景是不足的,需要擴展,接下來就通過模擬這個場景體現開閉原則。
(1)場景案例代碼。
(2)定義接口。分別定義了三種求面積的接口。


·長方形面積,長×寬。
·三角形面積,使用海倫公式,S=,其中p=(a+b+c)/2。
·圓形面積,S=πr2。
(3)實現類。在實現類中,分別實現三種類型的面積計算,長方形(rectangle)、三角形(triangle)、圓形(circular)。其中,圓形面積的 π 值取的是 3.14D,這也是要擴展精度的方法和體現開閉原則的地方。

2.2.3 違背原則方案
如果不考慮開閉原則,也不思考這種方法在整個工程服務中的使用情況,那么直接修改π值就可以了;但這樣做就會破壞整個工程服務的穩定性,也會造成一些風險。
例如,用原來精度的π值計算出的圓形面積本可以滿足需求,但是因為精度加長破壞了原有精度下的穩定性,就像齒輪間的嚙合程度、方向盤的間隙等。

2.2.4 開閉原則改善代碼
按照開閉原則方式實現起來并不復雜,它的主要目的是不能因為個例需求的變化而改變預定的實現類,除非預定的實現類有錯誤。
實現過程是繼承父類擴展需要的方法,同時可以保留原有的方法,新增自己需要的方法。

擴展后的方法已經把求圓形面積的精度增長,需要使用此方法的用戶可以直接調用。而其他的方法,如長方形面積、三角形面積,則可以繼續使用。
- 軟件項目估算
- GAE編程指南
- Rake Task Management Essentials
- 算法基礎:打開程序設計之門
- 編寫高質量代碼:改善Python程序的91個建議
- 面向STEM的Scratch創新課程
- Quarkus實踐指南:構建新一代的Kubernetes原生Java微服務
- Cocos2d-x學習筆記:完全掌握Lua API與游戲項目開發 (未來書庫)
- Kotlin編程實戰:創建優雅、富于表現力和高性能的JVM與Android應用程序
- Java程序設計入門
- Android Wear Projects
- Python圖形化編程(微課版)
- Serverless Web Applications with React and Firebase
- Advanced UFT 12 for Test Engineers Cookbook
- C陷阱與缺陷