2012年10月13日 星期六

Simple Factory

在 Design Patterns 中,與 Factory 相關的 Patterns,總共有三個:

  • Simple Factory
  • Factory Method
  • Abstract Factory
這三個彼此有緊密的關係,之後會對這三個做綜合介紹
我們先來看最簡單易懂的 Simple Factory



Simple Factory 顧名思義,這個 Pattern 非常簡單,而且是一家工廠
何謂工廠?想必大家都了然於心
工廠就是用來製造產品的地方,並且製造出來的產品會有一定的相似度
比如說一個製茶工廠,想當然爾它可以製造出紅茶、綠茶、奶茶等等茶類
它肯定不會製造出可樂、汽水、果汁等等其他非茶類飲料

大致了解工廠特性後,大家可能會想問為何需要這個工廠?
主要原因是透過這工廠,Client 不需要知道這些產品是怎麼製造出來的
反正 Client 只要跟工廠要某某產品,工廠就會做好給 Client
如此便可以讓 Client 有個統一窗口去拿產品
另一方面有新產品加進來時,只要在工廠修改就好
Client 不需要改變他的習慣,換句話說,Client 的程式完全不需要修改

下面是 Simple Factory 的 UML Class Diagram:





在 SimpleFactory 這 Class 會有一個 createProduct()
它根據 Client 的需求產生 ConcreteProduct1 或者是 ConcreteProduct2
需要注意的是 AbstractProduct 是個 Interface
ConcreteProduct1 與 ConcreteProduct2 皆繼承 AbstractProduct

範例程式(製茶工廠):



範例程式與 Class Diagram 的對應關係:

  • Client <==> main
  • SimpleFactory <==> TeaSimpleFactory
  • AbstractProduct <==> Tea
  • ConcreteProduct1 <==> RedTea
  • ConcreteProduct2 <==> MilkTea
註:有些人會讓 createProduct() 是 static function (C++) / class method (Objective-C)
這樣做的好處就是 Client 不需要產生 SimpleFactory 的 instance
大家有空可以試著改改看囉