[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
分成三大類:
  1. Creational: 物件生出相關的Pattern
  2. Structural: 物件跟物件關係的Pattern
  3. Behavioural: 物件跟物件互動行為的Pattern


問題:物件導向程式Performance一般比較不好,為什麼我們需要物件導向程式?
  1. Code reuse 較容易
  2. 較為彈性
  3. 較好maintain

Creational Pattern
  1. Singlaton
    例如: 有一個Company的Class,中華電信這家公司是Company Class的一個instance

    當我們在Access 的時候,要確保我們看到的是同一個中華電信的instance
    不可以自己亂new一個新的

    這時就需要一個機制可以限制有一個Class只能被new一次,不能出現第二次
    也就是Create的時候只能Create一次,不能Create第二次
    做法:
    不讓別人new!
    把Constructor private 保護起來,然後利用一個static的method去呼叫它
    螢幕快照 2015-12-07 下午4.25.24.png
    螢幕快照 2015-12-07 下午4.26.01.png

螢幕快照 2015-12-07 下午4.28.38.png

在Java的繼承當中,沒有繼承Constructor,但是本Pattern中,Child Class可以透過Parent的Method getCompanyInstance() 來Access到Parent自己的 private constructor,達到物件唯一 Singleton的目的


Structual Patterns
  1. Composite Patterns
Aggregation v.s. Composition
Aggregation: Parent 刪掉時 不會連帶影響到 Child
Composition: Parent 刪掉時會連帶影響到繼承他的所有Child
螢幕快照 2015-12-07 下午4.37.58.png
廣告會是 MediaClip 所組成的MediaClip 會由三種Clip所組成的: 1. video  2. audio  3. 影音合成交錯出現的
螢幕快照 2015-12-07 下午4.42.09.png
螢幕快照 2015-12-07 下午4.44.11.png
Behavioural Patterns
  1. State
    原始最直觀的想法是這樣:用很多 if 來表達各種State要幹麻
    螢幕快照 2015-12-07 下午4.46.59.png
    本Pattern建議大家這樣寫,只用繼承一的State的Class
    螢幕快照 2015-12-07 下午4.47.11.png
    利用 override 方法 calCost(),可以不用寫 if 就可以方便地 Call 到正確的方法
    而且還有一個好處,方便增加新的State

    本Pattern的設計圖如下
    螢幕快照 2015-12-07 下午4.50.43.png




參考閱讀:
Design Pattern


書:


Design Pattern in java





Design Principle



思考:Java 裡面 String Class 不能隨便給人家修改,甚至不能隨便給人家擴充(Extension),為什麼Java要這樣設計String Class呢? 查詢一下這樣的設計符合哪一種Design Pattern





留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking