code: Duck
- 行為透過委派 (delegate) 執行
- 行為透過合成 (composition) 定義
- 行為可以靈活擴充, 而不影響原有程式碼
- 行為可動態設定, 隨時改變
code: Weather
- subject, observer 都是 interface
- observer 透過 subject interface 執行註冊, subject 透過 observer interface 觸發更新
code: Weather
- 使用繼承使型態相符
- java.io 屬於裝飾者模式
- 缺點: 會有大量的類別(裝飾者)
code: Pizza
- 確認哪些會改變, 哪些不會改變
- 會改變: pizza 種類、口味 (開放新增, 不用管加了什麼在 pizza 上)
- 不會改變: 餅皮製作、烘烤、切片、裝盒 (封閉修改)
- 抽象工廠 PizzaStore
- 抽象產品 Pizza
- 透過子類別實體化產品
- 選擇了子類別,相當於選擇了產品類型
- 鬆綁 (decouple)
- 父類別 PizzaStore 與子類別 NYStylePizzaStore , ChicagoStylePizzaStore 的關係鬆綁
- PizzaStore.orderPizza() 不用知道在處理哪種 pizza, 只負責執行
- @override 可寫可不寫, JVM 會自動判斷, 有寫的話 IDE 會協助驗證
- abstract/interface
- abstract 可以有建構式, interface 沒有
- is a: 用 abstract
- has a/like a: 用 interface