Udemy課程Design Patterns in Java 2

SOLID Design Principles-(2)Open-Closed Principle(OCP)

ZONGRU Li
2 min readJul 23, 2019

Open-Closed Principle(OCP): 開放封閉原則

解釋:

擴展開放-->易於擴展,修改封閉-->避免改到舊有正常運作的code

以下將以兩個概念合講:OCP+ specification(規格)

直接以範例講解,假設是個購物網站,要做簡單的商品篩選功能

來篩選specific criteria(特定規格)

先定義幾個篩選條件的enum

再來是商品的class

接著再建立篩選商品功能的class-ProductFilter

建立DemoOCP class

執行可以見到:

所有的一切都運作正常,結果也如預期一樣

只是程式都是違反OCP架構

舉例來說,每當我們有新加入的filter時

我們都要跳到ProductFilter裡面才能新增

為解決上述問題,更改個寫法

  1. 建立Specification Interface

2.建立Filter Interface

3.建立ColorSpecification實作Specification<T>,在此我們省去找規格class

4.同理建立SizeSpecification一樣實作Specification<T>

5.建立BetterFilter

6.在一樣的DemoOCP創造實例來比較

並且執行結果與舊方式相同:

這樣寫法有什麼好處:

當有新的篩選條件加入時,不用跳到特定class裡面去新增Method

而是只要繼承或實作界面就好

只要增加新的程式碼就可以擴展功能,而不是修改既有的程式碼

至此可能還有兩個條件該怎麼實作呢?

新增AndSpecification一樣實作Specification

原本只比對一個項目回傳T/F

現在改寫成比對兩個項目,但是一樣回傳T/F,完全不影響架構

一樣滿足OCP原則

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet