目的
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
Abstract Factory 特別的地方就在於他會負責建立「一整族」相關的物件
意思就是他會產生很多個物件,而物件之間基本上會有關聯性
在實作中 Abstract Factory 會利用好幾個 Factory Methods 來達成
在介紹 Factory Method中提到,一個 Product 會定應到一個 factory method
由於 Abstract Factory 針對的是「一整族」相關的物件
所以便可藉由好幾個 Factory Methods 來完成
這麼做的好處主要可以快速且容易地抽換掉整族物件
而且也可以凸顯出這些物件之間的關聯性
Abstract Factory 的 UML Class Diagram:
範例程式(新鮮紅茶店與一般紅茶店):
範例程式與 Class Diagram 的對應關係:
- Client <==> BlackTeaStore
- AbstractFactory <==> BlackTeaAbstractFactory
- ConcreteFactory1 <==> FreshBlackTeaFactory
- ConcreteFactory2 <==> OrdinaryBlackTeaFactory
- AbstractProductA <==> BlackTea
- ConcreteProductA1 <==> FreshBlackTea
- ConcreteProductA2 <==> OrdinaryBlackTea
- AbstractProductB <==> Sugar
- ConcreteProductB1 <==> NaturalSugar
- ConcreteProductB2 <==> ArtificialSugar
在三個關於 factory 的 patterns 中,這個是看起來最複雜的
但其實概念上並不難
Abstract Factory 精華處就在於他針對的是「一整族」的相關物件
至於 Simple Factory、Factory Method、Abstract Factory 三者之間有何差異
下一篇將會有更詳細地說明
最後別忘了回到前頭看看 Abstract Factory 的目的喔
[1] "物件導向設計模式", Gamma, Johnson, Helm, Vlissides 著, 葉秉哲譯
沒有留言:
張貼留言