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