2012年11月16日 星期五

Simple Factory、Factory Method 與 Abstract Factory

Design Patterns 的三大工廠:Simple Factory、Factory Method 與 Abstract Factory
這三大工廠都是製造產品的地方,究竟有何差別?
這便是這次所要討論的主題
在此之前,我們先來復習這三個工廠吧



  • Simple Factory:一個工廠生產出一個產品,這些產品是屬於同一類的




















  • Factory Method:工廠所生產的方式會被延到 subclass 去實作,一個產品會對應到一種生產方式,而一個生產方式則會由一個 subclass 的工廠去實作
  • Abstract Factory:會生成一系列相關但不同類的產品,在實作上常利用 Factory Method 來實作



Simple Factory 很直觀地就是這工廠需要生成哪些產品,就會產生哪些產品,因此當要新增產品時,就必須修改原本的實作
然而,Factory Method 由於把實作細節延到 subclass,因此只需要新增一個 subclass 實作定義好的生產 method 就行了,完全不需要更改原本的實作
至於 Abstract Factory 則和 Factory Method 很像,同樣都會把工廠抽象化,實作細節會延到 subclass,但不同的是 Abstract Factory 主要是針對一系列相關但不同類的產品

根據這些差異,小編建議一些各個使用時機:
  • 若產品的種類在初期已經定義明確,爾後不太會有太大的更動,建議用 Simple Factory 即可,簡單明瞭且效能會比較好
  • 若產品種類在初期十分模糊,則用 Factory Method,可以帶來比較大的彈性,不過就會產生許多實作檔(.cpp)和標頭檔(.h)
  • 針對一系列相關但不同類的產品,當然是使用 Abstract Factory

Design Patterns 裡面的三個工廠總算介紹完了
接下來還會有更多更有趣的 Patterns介紹給大家
拭目以待吧 :D

Reference: