程式碼質量-開閉原則

BNTang發表於2023-11-26

前言

什麼是開閉原則?

  • 開閉原則(Open-Closed Principle, OCP)是 物件導向 設計中的一個重要原則。
  • 它指出軟體實體(如類、模組、函式等)應該對擴充套件開放,對修改封閉。這意味著一個實體允許其行為被擴充套件,但不允許修改其原始碼。

不遵循開閉原則的程式碼示例

假設有一個簡單的類,用於根據不同的形狀型別繪製圖形。如果要新增新的形狀型別,需要修改已有的程式碼。

程式碼在:https://github.com/BNTang/code-quality/tree/main/src/main/java/top/it6666/開閉原則/不遵循開閉原則的程式碼示例

遵循開閉原則的程式碼示例

改進後的程式碼使用 多型繼承 來允許新的形狀型別的新增,而不需要修改現有程式碼。

程式碼在:https://github.com/BNTang/code-quality/tree/main/src/main/java/top/it6666/開閉原則/遵循開閉原則的程式碼示例

在這個遵循開閉原則的版本中,GraphicEditor 不需要知道具體的形狀型別。它只呼叫 Shape 類中的 draw() 方法。這樣,新增新的形狀型別時,只需要擴充套件 Shape 類並實現 draw() 方法,而不需要修改 GraphicEditor 或其他形狀類的程式碼。這就是遵循開閉原則的設計。

解決方案

遵循開閉原則的其他解決方案通常涉及使用設計模式,這些模式能夠提供靈活性和擴充套件性,同時保持現有程式碼的穩定性。

以下是一些常見的設計模式和技術,它們有助於實現開閉原則:

  • 策略模式(Strategy Pattern)
  • 工廠模式(Factory Pattern)
  • 模板方法模式(Template Method Pattern)
  • 裝飾器模式(Decorator Pattern)
  • 依賴倒置原則(Dependency Inversion Principle)

透過採用這些設計模式和原則,可以建立靈活且可維護的軟體系統,使得新功能的新增或現有功能的變更,不會破壞或過多地修改現有的程式碼結構。這些方法都是為了達到“對擴充套件開放,對修改封閉”的目標。