1. 程式人生 > >設計模式六大設計原則(六):開閉原則

設計模式六大設計原則(六):開閉原則

開發十年,就只剩下這套架構體系了! >>>   

一、定義

Software entities like classes,modules and functions should be open for extension but closed for modifications.(一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。)

開閉原則相比前面介紹的5項原則更模糊,其只界定了我們要達到什麼目標,而沒有告訴我們怎麼去做。

開閉原則對擴充套件開放,對修改關閉,並不意味著不做任何修改,低層模組的變更,必然要有高層模組進行耦合,否則就是一個孤立無意義的程式碼片段。

二、為什麼要實現開閉原則

  • 對測試的影響。若軟體實現開閉原則,那麼針對一個需求的擴充套件我們只能修改以前的程式碼,這對以前寫好的單元測試會造成影響。
  • 提高複用性。所有的邏輯都是從原子邏輯組合而來的,實現開閉原則的手段之一是通過縮小邏輯粒度,抽象相同的邏輯,提高了程式碼複用。
  • 提高可維護性。開閉原則通過擴充套件的方式實現產品迭代,比修改原有程式碼更容易。
  • 面向物件開發的開發需求。是物件就會有變化,而開閉原則通過抽象,限制了變化邊界,是面向物件開發的開發需求。

三、如何使用開閉原則

(一) 制定抽象約束

通過介面或抽象類約束一組可能變化的行為。

  1. 通過介面或抽象類約束擴充套件,對擴充套件進行邊界限定。
  2. 引數型別、引用物件儘量使用介面或者抽象類,而不是實現類;
  3. 抽象層儘量保持穩定,一旦確定儘量不要修改。

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

所謂元資料指的是配置資訊,可以從檔案中或資料庫中讀取,如springBoot的application.yml或application.propertis等等。

(三) 封裝變化

  1. 將相同的變化封裝到一個介面或抽象類中。
  2. 將不同的變化封裝到不同的介面或