建造樣式與抽象工廠樣式的區別

讀者可能已經注意到了,建造樣式與抽象工廠樣式很是相像,而二者又都是用來建構同時屬於幾個產品族的對象的樣式。那麼這兩種樣式有什麼樣的區別呢?抽象工廠樣式的簡略類別圖以下所示。 
 
在抽象工廠樣式中,每一次工廠對象被呼叫時都會傳回一個完整的產品對象,而使用端有可能會決定把這些產品組裝成一個更大的和複雜的產品,也有可能不會。工廠對象是沒有狀態的,不知道上一次構建的是哪個產品,也沒有將來的概念,不知道下一次構建的是哪個產品,更不知道本身構建的產品在更高層的產品結構藍圖中是什麼位置。

建造類別則不一樣,建造樣式的重點在導演者角色。導演者對象是有狀態的,它知道總體藍圖,知道上一次、這一次和下一次交給建造者角色去構建的零件是什麼,以便可以將這些零件組裝成爲一個更大規模的產品。它一點一點地建造出一個複雜的產品,而這個產品的組裝程序就發生在導演者角色內部。建造者樣式的使用端拿到的是一個完整的最後產品。

換言之,雖然抽象工廠樣式與建造樣式都是設計樣式,可是抽象工廠樣式處在更加具體的尺度上,而建造樣式則處於更加宏觀的尺度上。一個系統能夠由一個建造樣式和一個抽象工廠樣式組成,使用端經過呼叫這個導演角色,間接地呼叫另外一個抽象工廠樣式的工廠角色。工廠樣式傳回不一樣產品族的零件,而建造者樣式則把它們組裝起來。

好比仍以衆神造人爲例,女媧利用建造樣式負責把靈魂、耳目、手臂等組合成一個完整的人,而黃帝、上駢、桑林各自利用工廠樣式創造出靈魂、耳目、臂手等。女媧沒必要考慮靈魂、耳目、手臂是什麼樣子、怎麼創造出來的,這就成爲一個由建造樣式和抽象工廠樣式組合而成的系統。

本書認爲建造樣式這個名字不如改成導演樣式更能反映出本樣式的本質,也更容易與工廠樣式區分。實際上,只要向簡單工廠樣式、工廠方法樣式、抽象工廠樣式(甚至原型樣式)中加入一個通曉總體產品結構的導演者角色,就能夠獲得某種形式的建造樣式---由導演者角色反覆呼叫各個工廠對象進行零件建造,而後由導演者角色進行零件組裝,造成最後產品。

spa

相關文章
相關標籤/搜索