天天看點

Java設計原則—開閉原則

開閉原則(Open Closed Principle)是Java世界裡最基礎的設計原則,它指導我們如何建立一個穩定的、靈活的系統。

定義:

一個軟體實體如類、子產品和函數應該對擴充開放,對修改關閉。

Softeware entities like classes,modules and functions should be open for extension but closed for modifications.

開閉原則的含義是說一個軟體實體應該通過擴充來實作變化,而不是通過修改已有代碼來實作變化。

軟體實體包括以下幾個部分:

  • 項目或軟體産品中按照一定的邏輯規則劃分的子產品
  • 抽象和類
  • 方法

開閉原則是為軟體實體的未來事物而制定的對現行開發設計進行限制的一個原則。

注意:開閉原則對擴充開放,對修改關閉,并不意味着不做任何修改,低層子產品的變更,必然要有高層子產品進行耦合,否則就是一個孤立無意義的代碼片段了。

變化的類型:

  • 邏輯變化
  • 子子產品變化
  • 可見試圖變化

一個項目的基本路徑應該是這樣的:項目開發、重構、測試、投産、運維,其中的重構可以對原有的設計和代碼進行修改,運維盡量減少對原有代碼修改,保持曆史代碼的純潔性,提高系統的穩定性。

開閉原則的重要性:

  • 開閉原則對測試的影響

開閉原則可是保持原有的測試代碼仍然能夠正常運作,我們隻需要對擴充的代碼進行測試就可以了。

  • 開閉原則可以提高複用性

在面向對象的設計中,所有的邏輯都是從原子邏輯組合而來的,而不是在一個類中獨立實作一個業務邏輯。隻有這樣代碼才可以複用,粒度越小,被複用的可能性就越大。

  • 開閉原則可以提高可維護性
  • 面向對象開發的要求

如何使用開閉原則:

  • 抽象限制

第一,通過接口或者抽象類限制擴充,對擴充進行邊界限定,不允許出現在接口或抽象類中不存在的public方法;

第二,參數類型、引用對象盡量使用接口或者抽象類,而不是實作類;

第三,抽象層盡量保持穩定,一旦确定即不允許修改。

  • 中繼資料(metadata)控制子產品行為

中繼資料就是用來描述環境和資料的資料,通俗地說就是配置參數,參數可以從檔案中獲得,也可以從資料庫中獲得。

Spring容器就是一個典型的中繼資料控制子產品行為的例子,其中達到極緻的就是控制反轉(Inversion of Control)

  • 制定項目章程

在一個團隊中,建立項目章程是非常重要的,因為章程中指定了所有人員都必須遵守的約定,對項目來說,約定優于配置。

  • 封裝變化

對變化的封裝包含兩層含義:

第一,将相同的變化封裝到一個接口或者抽象類中;

第二,将不同的變化封裝到不同的接口或抽象類中,不應該有兩個不同的變化出現在同一個接口或抽象類中。

作者:翎野君

如果您喜歡或希望看到更多我的文章,可關注我的微信公衆号《翎野君》。