Yet Another Design Pattern
我舉幾個場景, 讓您快速搞懂該用哪一種 Design Pattern (設計模式)

先搞清楚

設計模式是什麼?

*同一個需求(or 挑戰)寫成程式, 可以有非常多種的寫法, 就像一個相同的作文題目, 寫出來的文章, 卻千變萬化一樣.


等同於, 寫作文技巧教學, 也有一種 Design Pattern 稱之為 起承轉合” (它是一種敘述技巧,  在寫作時則是一種編劇結構

也就是說, 寫作文, 你也可以憑空想像湊出一篇文章, 但如果你懂 起承轉合” 的道理, 你的文章會更有結構, 看起來更連貫, 流暢, 明確, 簡潔. 寫程式也是一樣的道理, 學會這些可能的 “物件導向” 的結構或用法技巧, 讓你的程式更有架構, 物件之間更關係獨立且鬆耦合(lossly coupling), 讓程式執行結果更可預測, 更有彈性, 容易 reuse, 也更容易維護.

簡單講, 物件導向程式的 “設計模式” 是介紹你幾種, 好用的類別寫法, 讓你的程式 物件之間 的耦合度降低.

軟體界, “物件導向” “類別” 所謂的 “耦合” (Coupling) 是什麼?


*兩個類別或物件之間關係的緊密程度

*分成 “鬆耦合” (Loose coupling) 跟 “緊耦合” (Tight coupling) 兩種

緊耦合 (Tight coupling) 名詞解釋

(一)指兩個計算處理,以高度相依的方式完成一計算工作。
(二)指二個程式模組邏輯相依度高,即修改一個模組會影響到另一個。
(三)指二個電腦,以高度相依的方式進行工作。

鬆耦合 (Loose coupling)

剛好相反, 低度相依

舉例:衣服跟人的身體之間, 是 “鬆耦合”, 衣服脫掉, 並不影響人的身體.
舉例:皮膚跟人的身體之間, 是 “緊耦合”, 皮膚要改變顏色, 身體也會有所改變.
*所以提到模組 reuse (或有彈性 flexible), 就像以上例子, 我們要換衣服很容易, 我們要換皮很難.

*程式設計時, 盡量考慮讓物件或模組, 或服務之間, 耦合程度, 降到越低越好 !!


好處 :
  • 當程式越寫越大, 物件越來越多時, 才不會改動或抽換ㄧ個物件, 就需牽一髮動全身.
  • 程式 容易擴充
  • 程式 容易維護
  • 程式 “容易測試”


什麼叫 “容易測試”?

*容易寫 Unit test 測試程式, 就是容易測試 !!



場景ㄧ

開一家 “辛巴克” 咖啡店面, 裡面有員工 “A”, “B”, “C” 三名. ”員工“ 類別 與 “咖啡店面” 的類別 之間程式要怎麼寫? (用 Tight coupling 方式寫一種, 再用 Loose coupling 方式寫一次)

A. 沒用 “類別“ 方式寫
辛巴克 = ["A", "B", "C"]

B. Loose coupling 
class 員工:
    def __init__(self, name):