前言
面向對象有人分爲五大原則,分別爲單一職責原則、開放封閉原則、依賴倒置原則、接口隔離原則、里氏替換原則。
也有人分爲六大原則,分別爲單一職責原則、開放封閉原則、依賴倒置原則、接口隔離原則、里氏替換原則、迪米特法則。
現在我們來介紹開放封閉原則,也叫開閉原則
概念
開放封閉原則: 軟件實體(模塊、類、函數等)應該可以擴展,但是不可以修改。也就是說軟件對擴展開放,對修改關閉。
需要說明的是,對修改關閉不是說軟件設計不能做修改,只是儘量不要做不必要的修改。怎麼才能做到呢?那就是有相應的擴展性。
其實,軟件有相應的擴展性是好處,但是不能說每個地方都有擴展。反而造成了代碼的臃腫。所以這裏的擴展與修改關閉是有限制的。
開閉原則,可以說是其他五大原則的實現,也是面向對象設計的終極目標。我們也可以說成開閉原則是其他原則的核心。
深入理解
開閉原則其實在大話設計模式中說得非常好,讓人通俗易懂。
它舉了一個例子,我覺得說得非常好。是加減乘除法的例子。
開始需求是做一個加法的操作。後來繼續加入減法、乘法、除法。
開始我們想加法以後可能會做一個需求變更:加入其它的算法法則。所以我們要有一個預判性,這個預判性會導致我們項目以後的擴展性,也會導致如果需求發生變更,程序修改的難易程度。
所以,我們要做一個算法法則的操作類,加減乘除法都繼承此操作接口。再加一個算法法則的客戶端類類操作此算法。