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

1、定義

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

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

開閉原則對擴展開放,對修改關閉,並不意味着不作任何修改,低層模塊的變動,必然要有高層模塊進行耦合,不然就是一個孤立無心義的代碼片斷。app

2、爲何要實現開閉原則

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

3、如何使用開閉原則

(一) 制定抽象約束

經過接口或抽象類約束一組可能變化的行爲。函數

  1. 經過接口或抽象類約束擴展,對擴展進行邊界限定。
  2. 參數類型、引用對象儘可能使用接口或者抽象類,而不是實現類;
  3. 抽象層儘可能保持穩定,一旦肯定儘可能不要修改。

(二) 元數據(metadata)控制模塊行爲

所謂元數據指的是配置信息,能夠從文件中或數據庫中讀取,如springBoot的application.yml或application.propertis等等。單元測試

(三) 封裝變化

  1. 將相同的變化封裝到一個接口或抽象類中。
  2. 將不一樣的變化封裝到不一樣的接口或抽象類中。
相關文章
相關標籤/搜索