[Note] Design Patterns 課程筆記
名詞解釋:
Slide 12
Context:會使用的情況
Force: 限制條件
以行李箱為例:
Context:要裝東西,要裝重物
Force:上下樓梯不方便
Slide 13
Related Pattern: 一個Pattern 會附著其他形式的Pattern
思考:大的包包為什麼會有小的口袋?
思考:什麼是設計?
問題:沒有物件導向之前?
程式的資料跟程式的關係是什麼?
回想 C 語言當中的 data
→ 資料跟程式間的關係,簡單來說,就是 Data Structure & Algorithm
有了物件導向的概念後 →
把資料跟方法(程式function)結合在一起,變成了物件(object)
問題:在沒有framework之前,用什麼? → Library
Framework v.s. Library
framework 是我想要完成一件事,我先把這個架構寫好,大部份完成了,但是沒有把細節完成
library 僅僅提供執行所需的函數,沒有提供架構
Design Pattern
分成三大類:
- Creational: 物件生出相關的Pattern
- Structural: 物件跟物件關係的Pattern
- Behavioural: 物件跟物件互動行為的Pattern
問題:物件導向程式Performance一般比較不好,為什麼我們需要物件導向程式?
- Code reuse 較容易
- 較為彈性
- 較好maintain
Creational Pattern
- Singlaton
例如: 有一個Company的Class,中華電信這家公司是Company Class的一個instance
當我們在Access 的時候,要確保我們看到的是同一個中華電信的instance
不可以自己亂new一個新的
這時就需要一個機制可以限制有一個Class只能被new一次,不能出現第二次
也就是Create的時候只能Create一次,不能Create第二次
做法:
不讓別人new!
把Constructor private 保護起來,然後利用一個static的method去呼叫它
在Java的繼承當中,沒有繼承Constructor,但是本Pattern中,Child Class可以透過Parent的Method getCompanyInstance() 來Access到Parent自己的 private constructor,達到物件唯一 Singleton的目的
Structual Patterns
- Composite Patterns
Aggregation v.s. Composition
Aggregation: Parent 刪掉時 不會連帶影響到 Child
Composition: Parent 刪掉時會連帶影響到繼承他的所有Child
廣告會是 MediaClip 所組成的MediaClip 會由三種Clip所組成的: 1. video 2. audio 3. 影音合成交錯出現的
Behavioural Patterns
- State
原始最直觀的想法是這樣:用很多 if 來表達各種State要幹麻
本Pattern建議大家這樣寫,只用繼承一的State的Class
利用 override 方法 calCost(),可以不用寫 if 就可以方便地 Call 到正確的方法
而且還有一個好處,方便增加新的State
本Pattern的設計圖如下
參考閱讀:
Design Pattern
書:
Design Pattern in java
Design Principle
思考:Java 裡面 String Class 不能隨便給人家修改,甚至不能隨便給人家擴充(Extension),為什麼Java要這樣設計String Class呢? 查詢一下這樣的設計符合哪一種Design Pattern
留言
張貼留言