設計模式 建造者模式

2021-08-08 07:52:27 字數 2261 閱讀 5426

今天我們來一起看一下建造這模式。

在這樣的設計模式中,有以下幾個角色:

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 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...