最後要進入抽象工廠模式前,先來設想一個情況─前面對於pizza的製作,是由各pizza factory各自create實例化出來,而現在希望連pizza本身的製作食材都在地化,意思是不只是口味,連裡面的各種材料都有自己一套,但又希望有一致的規範管理(否則又會是維護災難!)。從前面的練習,應該不難想像可以透過一個統一的介面來進行管理。這裡我們就以 "食材工廠 來舉例,用它作為介面來規範大家的食材生產方式。直接來看看具體的程式碼應該最清楚:
/*程式碼待補*/
/*程式碼待補*/
/*程式碼待補*/
/*程式碼待補*/
這個加入的食材工廠,可以稱為 抽象工廠(abstract factory) ,進一步把會變動的食材再抽出來,讓各地的pizza store本身依據口味去create pizza就好,不用連各種食材都定義在pizza store裡面,而是交由食材工廠去做,又達到解耦合的功效。
來看看抽象工廠模式的定義:
抽象工廠模式提供一個介面來建立相關或相依的物件家族,而不需要指定具體類別。
抽象工廠模式的架構大致如下
圖1
而在本例中,抽象工廠模式的架構圖會像這樣:
圖2
在工廠方法這系列第一次讀真的會不太確定他們之間的區別定義,因為本書用非常故事化的手法來敘述,有時候沒辦法直接對應具體的定義,一邊爬了很多說明文,再來回對照,看了好幾次終於比較清楚代表的概念;但工廠模式這系列真的非常常見,弄懂之後對於設計模式可說是多了一層把握!建議也可以多多找尋相關的資料,消化成可以自己掌握的知識。