TIL: 加新東西不改舊程式
2026-06-03·2 min read·updated 2026-06-03·OOPSOLIDDesign PatternsOOAD
SOLID 五原則之一。新增功能應該透過新增程式碼完成,而不是回頭修改現有程式碼。
Open/Closed Principle(OCP,開放封閉原則),SOLID 五個原則之一。
SOLID 是五個物件導向設計原則的縮寫:Single Responsibility、Open/Closed、Liskov Substitution、Interface Segregation、Dependency Inversion。
軟體實體應該對擴充開放,對修改封閉。
新增功能時,應該透過新增程式碼來完成,而不是去修改現有程式碼。
違反 OCP 的版本
java
// CanvasModel.javafilter(o -> o.isSelected() && !(o instanceof LinkObject))今天新增一個 NoteObject 也不能被群組,就必須回去改這行:
java
filter(o -> o.isSelected() && !(o instanceof LinkObject) && !(o instanceof NoteObject))每次新增類別都要動舊程式碼,這樣就是對修改不封閉。
符合 OCP 的版本
java
filter(o -> o.isSelected() && o instanceof Groupable)改用 Groupable 介面來判斷:
NoteObject不能被群組 → 不實作Groupable,這行不用動NoteObject可以被群組 →implements Groupable,這行也不用動
對擴充開放(加新類別)、對修改封閉(舊程式碼不變)→ 符合 OCP。
結論
加新東西不改舊程式,是 OCP;每次加新東西都要改舊程式,是違反 OCP。
related_posts
2026-05-21TIL: 重構程式碼的原則OO 是為了讓程式容易改,不是設計漂亮。紀錄 Move Method、Switch Smell 兩個Bad Code,以及什麼時候不需要做物件導向。
OOPrefactoringDesign Patterns
2026-05-14TIL: 把策略從物件裡拆出來學習把「執行策略」從物件中拆出來,改用組合取代繼承,讓類型更彈性。OOPJavaDesign Patterns
2026-05-19TIL: 用 Mermaid 畫 UML 時序圖Mermaid 直接在 Markdown 裡畫 UML 時序圖,支援 loop、alt/else、opt 等常用區塊,不需要安裝任何工具。mermaidUMLdiagram
share›