抽象工廠模式作為工廠模式的一種,自然具有工廠模式的設計理念,也就是提供一種生產實際產品的方法。
builder模式的設計思想是提供一種組裝產品零件的方法。
二者乍看起來井水不犯河水,可仔細一看二者何其相似來耳。
在抽象工廠方法中有產品族的概念,意指同一系列的產品。比如魔獸中的一個族就有一套這樣的單位,而不同族之間都含有類似的單位,而各自對應的單位又具有一些差異。這樣在抽象工廠方法中建立4個具體工廠,各自負責一個族的單位生產就很自然了。
作為對比,舉一個builder的例子。我們攢機器的時候首先會想到選用什么樣的CPU、顯卡,然后是什么樣的主板,繼而選擇什么樣的內存、硬盤。這樣我們在攢機器前就應該有一個所謂的指導類,向這個指導類中傳入具體的builder類就可以組裝出符合我們要求的機器。
也許你發現了二者的差別,抽象工廠中必須要有嚴格的界限,即是你的就不是我的;而builder模式不存在這樣一個限制,你沒有被要求選擇AMD就要選擇金士頓。在我看來,若只看表明確實如此,如果深究這并非什么二者的差別。builder模式的無限制也可以擴展到抽象工廠中去。
抽象工廠中某個產品等級結構(我覺得叫做產品種類更為合適)就要在每一個產品族中有一個具體的產品,比如農民就有侍僧、小精靈、苦力、農民四種,其它單位也基本如此。然而是可以有特例的,英雄就是一個特例。四個族中雖然含有各自的英雄,但是雇傭英雄的出現打破了這種限制,它們不屬于任何一個族,卻又屬于所有的族。這樣二者這方面的差別并不是本質上的。
那么本質上的差別是什么呢?
其實很簡單,本質上的差別還是源于設計理念。抽象工廠被設計出來的原因是生產一系列產品的需要,builder模式被設計出來的原因是組裝一系列的組件生產出一件產品。builder模式最終的目標是返回一件成品,而抽象工廠所返回的是一系列相互關聯的產品。
builder模式可以利用抽象工廠方法生產自己的組件,而抽象工廠方法如果將所有生產的產品組裝在一起也就成為了builder模式。
posted on 2012-11-13 17:51
老馬驛站 閱讀(512)
評論(0) 編輯 收藏 引用 所屬分類:
Design pattern