所謂的開閉原則(Open-Closed Principle,簡稱 OCP)說的是:軟件實體(類、模塊、功能等)應該可以被擴展,但不可被修改。
開閉原則說白了就是,應該在不修改現有代碼的基礎上,引入新功能。
開閉原則中的“開”,是指對于組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中的“閉”,是指對于原有代碼的修改是封閉的,即不應該修改原有的代碼。
而實際上,要做到百分之百的封閉是不可能的,但是在系統設計的時候,還是應該盡量做到這一點。
一個簡單的例子,假設現在需要實現一個加法的功能,很簡單,如圖示1:

現在的問題是,需求變了,要求還要實現一個減法的功能,這也很簡單,如圖示2:

如果需求再變,還要求能實現乘法和除法的功能,依然簡單,如圖示3:

從第2和第3步來看,很明顯,在需求改變,需要引進新的功能的時候,做法是在已有的類的基礎上通過新添方法來實現功能,假設在第2步之后,第3步的時候發現加法和減法功能
最終都沒有用到,反而乘法和除法需要用到,那么在第3步的時候就要推翻第2步之前的實現,在需求發生改變需要引進新的功能的時候,就要推翻整個之前的系統,很明顯這樣的做法
是不可取的,說明設計上出現了問題,這個缺陷明顯的是違反了OCP(開閉原則)。
需求總是在變的,如果可能,就要做到盡量不要去修改已有的實現,而應該通過擴展的手段來穩定需求的變動。
OCP原則替換圖2:

OCP原則替換圖3:

在我們最初編寫代碼的時候,我們假設變化不會發生,但最后變化發生的時候,可以通過創建抽象來隔離以后將要發生的同類變化。
開閉原則是面向對象設計中“可復用設計”的基礎,是面向對象設計中最重要的原則之一。 從開閉原則中可以看出,面對對象的重要原則是創建抽象化,并且從抽象化中導出
具體化,具體化可以有許多不同的版本,而每個不同的版本可以給出不同的實現。