設計模式六大設計原則(六):開閉原則
阿新 • • 發佈:2019-04-08
一、定義
Software entities like classes,modules and functions should be open for extension but closed for modifications.(一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。)
開閉原則相比前面介紹的5項原則更模糊,其只界定了我們要達到什麼目標,而沒有告訴我們怎麼去做。
開閉原則對擴充套件開放,對修改關閉,並不意味著不做任何修改,低層模組的變更,必然要有高層模組進行耦合,否則就是一個孤立無意義的程式碼片段。
二、為什麼要實現開閉原則
- 對測試的影響。若軟體實現開閉原則,那麼針對一個需求的擴充套件我們只能修改以前的程式碼,這對以前寫好的單元測試會造成影響。
- 提高複用性。所有的邏輯都是從原子邏輯組合而來的,實現開閉原則的手段之一是通過縮小邏輯粒度,抽象相同的邏輯,提高了程式碼複用。
- 提高可維護性。開閉原則通過擴充套件的方式實現產品迭代,比修改原有程式碼更容易。
- 面向物件開發的開發需求。是物件就會有變化,而開閉原則通過抽象,限制了變化邊界,是面向物件開發的開發需求。
三、如何使用開閉原則
(一) 制定抽象約束
通過介面或抽象類約束一組可能變化的行為。
- 通過介面或抽象類約束擴充套件,對擴充套件進行邊界限定。
- 引數型別、引用物件儘量使用介面或者抽象類,而不是實現類;
- 抽象層儘量保持穩定,一旦確定儘量不要修改。
(二) 元資料(metadata)控制模組行為
所謂元資料指的是配置資訊,可以從檔案中或資料庫中讀取,如springBoot的application.yml或application.propertis等等。
(三) 封裝變化
- 將相同的變化封裝到一個介面或抽象類中。
- 將不同的變化封裝到不同的介面或