Udemy課程Design Patterns in Java 2
Open-Closed Principle(OCP): 開放封閉原則
解釋:
擴展開放-->易於擴展,修改封閉-->避免改到舊有正常運作的code
以下將以兩個概念合講:OCP+ specification(規格)
直接以範例講解,假設是個購物網站,要做簡單的商品篩選功能
來篩選specific criteria(特定規格)
先定義幾個篩選條件的enum
再來是商品的class
接著再建立篩選商品功能的class-ProductFilter
建立DemoOCP class
執行可以見到:
所有的一切都運作正常,結果也如預期一樣
只是程式都是違反OCP架構
舉例來說,每當我們有新加入的filter時
我們都要跳到ProductFilter裡面才能新增
為解決上述問題,更改個寫法
- 建立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原則