1. 程式人生 > >第2章 面向物件的設計原則(SOLID):6_開閉原則

第2章 面向物件的設計原則(SOLID):6_開閉原則

6. 開閉原則(Open Closed Principle,OCP)

6.1 定義

(1)一個類應該對擴充套件開放,對修改關閉。要求通過擴充套件來實現變化,而且是在不修改己有的程式碼情況下進行擴充套件,也不必改動己有的原始碼或二進位制程式碼。

(2)在軟體生命週期內,變化是一個既定的事實,在設計時儘量適應這些變化,以提高項止的穩定性和靈活性,真正實現“擁抱變化”。而開閉原則告訴我們要通過擴充套件來實現這些變化而不是修改原來程式碼。

(3)修改關閉,並不意味著軟體不做任何的改動,低層模組的變更,必然要高層模組進行耦合,否則就是一個弧立無意義的程式碼片段。

6.2 開閉原則優點

(1)通過擴充套件己有的功能,可以提供新的行為,以滿足對軟體的新需求,使變化中的軟體系統有一定的適應性和靈活性

(2)己有的軟體模組,特別是最重要的抽象層模組不能再修改,這就使得變化中的軟體有一定的穩定性和延續性

(3)同時滿足了可複用性與可維護性

6.3 如何使用開閉原則

(1)抽象約束

  ①通過介面或抽象類約束擴充套件,對擴充套件進行邊界限定。通過介面,只能使用由介面提供的方法

  ②引數型別、引用物件儘量使用介面或抽象類,而不是具體的實現類

  ③抽象層儘量保持穩定,一旦確定就不要修改。

(2)元資料(metadata)控制模組行為

  元資料就是用來描述環境和資料的資料。儘量使用元資料來控制程式的行為,減少重複開發。

(3)制定專案章程

(4)封裝變化

  ①將相同的變化封裝到一個介面或抽象類中;變化不應當散落在程式碼的許多角落,而應當被封裝到一個物件裡。同一種變化的不同表象意味著是同一個繼承等級結構中的具體子類。

  ②將不同的變化封裝到不同的介面或抽象類中,不應該有兩個不同變化出現在同一個介面或抽象類。一種變化與另一種變化混合在一起,會違反單一性原則,所以應被分開。

6.4 最佳實踐

(1)幾種設計原則的小結(6個原則的首字母組合單詞(S.O.L.I.D,表示穩定)

  ①單一職責原則告訴我們實現類要職責單一

  ②里氏替換原則告訴我們不要破壞繼承體系

  ③依賴倒置原則

告訴我們要面向介面程式設計

  ④介面隔離原則告訴我們在設計介面的時候要精簡單一

  ⑤迪米特法則告訴我們要降低耦合

  ⑥開閉原則是總綱,他告訴我們要對擴充套件開放,對修改關閉

(2)建立穩定、靈活、健壯的設計,開閉原則是最基礎的原則,也是精神領袖

(3)開閉原則是最基礎的一個原則,前五個原則都是開閉原則的具體形態,而開閉原則才是靈魂。換一個角度,借用OOP的說法,開閉原則是抽象類,其他五大原則是具體的實現類。