軟件實體(類、模塊、函數等等)應該能夠擴展,可是不可修改。
對於擴展時開放的,對於更改時封閉的。
不管模塊式多麼的「封閉」,都會存在一些沒法對之封閉的變化。既然不可能徹底封閉,設計人員必須對於他設計的模塊應該對哪一種變化封閉作出選擇。他必須先猜想出最有可能發生變化的種類,而後構造抽象來隔離那些變化。
在咱們最初編寫代碼是,假設變化不會發生,當變化發生時,咱們就建立抽象來隔離之後發生的同類變化。
面對需求,對程序的改動是經過增長新代碼進行的,而不是更改現有的代碼。這就是開發-封閉原則的精神所在。
開發-封閉原則是面向對象編程設計的核心所在。遵循這個原則能夠帶來面向對象技術所聲稱的巨大好處,也就是可維護、可擴展、可複用、靈活性好。開發人員應該僅對程序中呈現頻繁變化的那些部分作出抽象,然而,對於程序中滅個部分均可以的進行抽象一樣不是一個好主意。拒毫不成熟的抽象和抽象自己同樣重要。