官术网_书友最值得收藏!

  • 重學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。

·圓形面積,Sr2

(3)實現類。在實現類中,分別實現三種類型的面積計算,長方形(rectangle)、三角形(triangle)、圓形(circular)。其中,圓形面積的 π 值取的是 3.14D,這也是要擴展精度的方法和體現開閉原則的地方。

2.2.3 違背原則方案

如果不考慮開閉原則,也不思考這種方法在整個工程服務中的使用情況,那么直接修改π值就可以了;但這樣做就會破壞整個工程服務的穩定性,也會造成一些風險。

例如,用原來精度的π值計算出的圓形面積本可以滿足需求,但是因為精度加長破壞了原有精度下的穩定性,就像齒輪間的嚙合程度、方向盤的間隙等。

2.2.4 開閉原則改善代碼

按照開閉原則方式實現起來并不復雜,它的主要目的是不能因為個例需求的變化而改變預定的實現類,除非預定的實現類有錯誤。

實現過程是繼承父類擴展需要的方法,同時可以保留原有的方法,新增自己需要的方法。

擴展后的方法已經把求圓形面積的精度增長,需要使用此方法的用戶可以直接調用。而其他的方法,如長方形面積、三角形面積,則可以繼續使用。

主站蜘蛛池模板: 泸西县| 刚察县| 贵港市| 五华县| 廉江市| 井陉县| 永福县| 双江| 阿荣旗| 巫溪县| 政和县| 昆山市| 临漳县| 宜宾县| 乃东县| 凉城县| 天全县| 沈阳市| 鹤峰县| 渝中区| 苍南县| 临潭县| 万全县| 溧水县| 夹江县| 白沙| 南平市| 肇庆市| 炎陵县| 乐昌市| 汝城县| 禄丰县| 大田县| 周宁县| 婺源县| 余江县| 彭阳县| 江口县| 鄂州市| 壶关县| 镇巴县|