今天我們來一起看一下建造這模式。
在這樣的設計模式中,有以下幾個角色:
1 builder:為建立乙個產品物件的各個部件指定抽象介面。
2 concreatebuilder:實現builder的介面以構造和裝配該產品的各個部件,定義並明確它所建立的表示,並 提供乙個檢索產品的介面。
3 director:構造乙個使用builder介面的物件。
4 product:表示被構造的複雜物件。concretebuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。
這些就是這個設計模式中涉及到的所有角色。
從名字上看,建造者,那麼重點一定是在builder和director上,由builder來構建product的各個部件,並完成最終的product裝配。由director構造乙個builder的實體物件,那麼指揮builder工作的內容都在director中,因此,我們在使用時,只需要持有director物件就行了。最終就能得到乙個product的物件。我們並不關注product的構建過程是怎樣的,它的構建對我們完全不透明。我只需要拿到product就行了。
建造這模式封裝了整個product例項化的過程,對前台不透明。
案例:我們需要一所房子(home),因此我找來了乙個包工頭(director,他懂房子的設計和構造),又找來了一群人來建房子(concreatebuilder,這些人只知道建造,對於設計並不懂,我也不懂,那麼就需要包工頭出場了),由包工頭來指揮這些人怎麼建造(怎麼做窗子,做門,做牆壁,做地板……等等)。包工頭也不組裝房子,還是由包工頭來設計生產和組裝的過程,組裝的過程最後還是由builder來完成的。最後我們只需要找到包工頭,拿到我們的房子就行了。整個過程中,我都沒有參與房子的建造過程,最後我還是拿到了房子。
使用上面這個案例,我們來用**實現整個過程:
home
public class home
class window
class door
class floor
public void speak()
}
我們需要一間房子,房子有門,有窗,有地板。
接下來需要建造房子的人(builder,concreatebuilder)
builder介面
public inte***ce builder
抽象了房子的各個部件和整個房子的建造過程
concreatebuilder
public class concreatebuilder implements builder
@override
public void buildwindow(string windowname)
@override
public void builddoor(string doorname)
@override
public void buildfloor(string floorname)
@override
public home buildhome()
}
在concreatebuilder中實際的去建造。
來看看包工頭都幹了什麼
director
public class director
home buildhome()
}
可以看到包工頭並沒有參與建造過程,它只是指揮了builder怎麼去建造,做窗子,做門,做地板,做房子,並把做好的房子返回回去
接下來我們做乙個測試類:
main
public class main
}
測試結果:
i am home , my window is windowb, door is doora, floor is floorc
從上面這個測試類中,我們看到,我們什麼也沒做,招了一群建造者,招了乙個包工頭(director),告訴包工頭,我需要一所房子;
然後包工頭(dirctor)就去指揮這群人(concreatebuilder),指導他們builderdoor(),buildwindow(),buildfloor(),最後組裝成房子(buildhome);
concreatebuilder在包工頭下達了命令之後,給這所房子做了門……最後組建了房子。
上面很形象的及時了整個建造者模式的過程,物件的建立由建造者完成,我們不再需要自己去做物件的建立過程。
設計模式 建造者模式
在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...
設計模式建造者模式
今天看了乙個設計模式。總結下,以免忘了。如何引入建造者模式的呢?作者舉了個例子。建造小人。當然需要 頭,左手,右手,左腳,右腳,軀幹。建造的過程使用 使用類裡面的方法就行了。但是如果需要乙個胖的小人,乙個瘦的小人呢?就需要重新構造乙個胖人類,乙個瘦人類。當然 使用者還需要自己處理構造的過程。這樣 就...
設計模式 建造者模式
定義 將乙個複雜的物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。包括的要素 1 產品類 2 抽象建造者或者介面 3 建造者 4 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...