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