# 六角鼠年鐵人賽 Week 33 - Design Pattern - Factory Method ==大家好,我是 "為了拿到金角獎盃而努力著" 的文毅青年 - Kai== ## 鈴木一郎 :::info 我的準備工作,就是排除任何會成為藉口的因素。 ::: ## 主題 Factory Method 上篇文章提到了 Open Close Principle 後,來談談常被提起一併討論的 Factory Method 中文常見名稱 **工廠模式** 到底很多人就會問了,Open Close Principle 跟 Factory Method 有哪裡不一樣? 說實在的,一開始 Kai 也不懂哪裡不同,因為兩者基本架構的 UML 一攤開幾乎一模一樣。 我覺得最好懂得應該是這樣: - **Open Close Principle** 是個設計上的 **原則**,它希望你能夠透過動態的方式建立實體,省略掉越多的 if 處理越好,甚至乾脆不要有 if 處理。 - **Factory Method** 是個實際可以應用的 **做法**,開發人員不需要去多了解子類別的應用是如何實現的,而是專心地將各個子類別放置到適當的位置去。 不知道這樣的說明,大家是否可以懂兩者的區別? 還是要先強調一點: **設計模式** 是為了做出更棒的架構,而沒有孰優孰劣之分。套句豹頭的話:「我全都要!」 ## 原則說明 類同 **Open Close Principle**,透過更換實體的方式,達到處理相同類型不同需求的目的,維持程式碼的整潔與節省開發人員的時間。 以下方圖為範例: 客戶端使用 CarService、放入參數、CarService 根據參數決定給出哪一個 Car 實體(TESLA or BMW),使用者並不需要知道其中判斷的邏輯,而是只要確保給出的類別是遵照 Car 介面的即可。 如此一來,客戶端可以藉由 CarService 進行快速、大量、重複物件的產生,這就是工廠模式的效果。 ## 架構 - 抽象、介面等接口物件 - 繼承實作的類別實體 ![](https://i.imgur.com/Rs69GdY.png) ## 目的 1. 僅須對新擴展的實體進行測試,不須測試舊實體,節省測試環節 2. 減少接口物件的維護作業 3. 提高程式碼的重複可用性 4. 擴展彈性增加需求實現的速度 :::danger Design Pattern 的學習不只是制式的設計架構學習,諸如 Open Close Principle 這種單純的原理也是 Kai 學習的方向之一,正所謂多讀一點書、多走一點路,人生就會更寬闊一些。 針對 Design Pattern 的部分,在主頁的排版上也許會有點不同,目的是希望說透過一連串的方式,尋系漸進讓大家知道說,哪些部分是什麼設計? 中間如何串聯、變化等。 [六角鼠年鐵人賽 Week 34 - Design Pattern - Singleton](/bWhirXCzSguQ4iueSKQJ5w) ::: 首頁 [Kai 個人技術 Hackmd](/2G-RoB0QTrKzkftH2uLueA) ###### tags: `Design Pattern`,`w3HexSchool`