# 開放封閉原則(OCP: Open-Closed Principle) ###### tags: `Design Patterns` `book` `principle` 一個類別應該「對擴充開放、對修改關閉」。什麼事對擴充開放,而又如何要對修改關閉呢?其實這裡提到的類別,指的是實作系統某項功能的類別。而這個功能類別,除非是修正功能錯誤,否則,當軟體的開發流程進入「完工測試期」或「上市維護期」時,對於已經測試完成或已經上線運作的功能,就應該「關閉對修改的需求」,也就是不能在修改這個類別的任何界面或實作內容。 但是,當增加系統功能的需求發生時,又不能置之不理,所以也必須對「功能的增加保持開放」。因此,為了達成這個原則的要求,系統分析就要朝向「功能介面化」的方向來設計,將系統功能的「操作方法」向上提升,抽象化為「介面」,將「功能的實作」往下移到子類別中。所以在面對增加系統功能的需求時,就可以使用「增加子類別」的方式來達成。而具體的實作方法可能是: 1. 重新實作一個新的子類別 2. 繼承舊有的實作類別,並在新的子類別中實作新增的系統功能 這樣一來,對於舊有的功能實作都可以保持不變(關閉),同時又能夠對功能新增的需求保持開放。