建造模式 Builder

2021-08-22 10:53:03 字數 3010 閱讀 2645

一、介紹

建造模式(builder)主要是為了將乙個複雜的物件的構建和它的實際表示分離,使得同樣的構建過程可以建立不同的表示。

建造模式是一步一步建立乙個複雜的物件,它允許使用者可以只通過指定複雜物件的型別和內容就可以構建它們,使用者不知道內部的具體構建細節,該模式非常類似與抽象工廠模式。

二、例項

在看建造模式的例項之前,請最好先理解抽象工廠模式(abstract factory) ,這裡也依舊是上次那個燉湯的例子!先看看這個builder模式的大致的uml圖。

首先定義乙個抽象的建造類soupbuffetbuilder,和抽象工廠模式一樣,在這個抽象類裡定義了各種燉湯的製作方法。值得注意的是,這裡和抽象工廠不同的是,其中額外定義了乙個建造和獲取目標集合物件的方法buildsoupbuffet()和getsoupbuffet(),所有的builder都是圍繞這個soupbuffet展開,而不再直接返回一種燉湯。

abstract class soupbuffetbuilder     

public void buildsoupbuffet()

public abstract void setsoupbuffetname();

public void buildchickensoup()

public void buildclamchowder()

public void buildfishchowder()

public void buildminnestrone()

public void buildpastafazul()

public void buildtofusoup()

public void buildvegetablesoup()

}

class bostonsoupbuffetbuilder extends soupbuffetbuilder     

public void buildfishchowder()

public void setsoupbuffetname()

}

class bostonclamchowder extends clamchowder

}

class bostonfishchowder extends fishchowder

}

[檀香山]燉湯加工中心,**honolulusoupbuffetbuilder內容如下:

class honolulusoupbuffetbuilder extends soupbuffetbuilder     

public void buildfishchowder()

public void setsoupbuffetname()

}

class honoluluclamchowder extends clamchowder

}

class honolulufishchowder extends fishchowder

}

不管加工中心如何,我們應該最初定乙個目標集合物件soupbuffet,可以把它理解為是乙個貨櫃吧!裡面盛裝了各種各樣的燉湯。當然你也可以在裡面公布一些額外的方法,比如說對這些燉湯的篩選或者組合等。

class soupbuffet     

public void setsoupbuffetname(string soupbuffetnamein)

public void setchickensoup(chickensoup chickensoupin)

public void setclamchowder(clamchowder clamchowderin)

public void setfishchowder(fishchowder fishchowderin)

public void setminnestrone(minnestrone minnestronein)

public void setpastafazul(pastafazul pastafazulin)

public void settofusoup(tofusoup tofusoupin)

public void setvegetablesoup(vegetablesoup vegetablesoupin)

public string gettodayssoups()

}

在建造模式裡面,還應該有乙個指導者(director)類,它可以接受乙個抽象建造類引數,並進一步包裝、生產相應的整合產品。

class soupbuffetdirector     

public soupbuffet createsoupbuffet()

}

三、分析

通過以上建造模式的例項,我們可以總結出以下這些參與者:

實現乙個建造模式,需要以下幾個關鍵步驟:

1、定義乙個抽象建造類,其中定義獲取目標產品的建造以及出口,如buildobject和getobject。

2、定義乙個或多個抽象建造類的實現類,順帶的定義了該實現類對應的實際產品種類等。

3、定義乙個指導類,用抽象建造類作為引數,來實際使用已有的實際建造類。

建造模式(builder)有著與抽象工廠模式(abstract factory) 一樣的優缺點,它一般是用來建立乙個比較複雜的大物件,裡面包含了多步部件拼裝的過程,而最終輸出的是乙個完整的大物件。

如果說和抽象工廠(abstract factory) 的目標是輸出許多同等的產品的話,那麼建造模式(builder)應該就是輸出乙個完整的大物件,裡面涵蓋了許多個同等的子部件。

建造模式 Builder

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式將乙個複雜物件的生成責任做了很好的分配,它把構造過程放到指揮者的方法中,把裝配過程放到具體建造者類中。當乙個複雜物件的建立需要很多步驟的時候,這些步驟在不同的條件下是變化的,通過不同的builder建立 不同風格 的...

建造 Builder 模式

建造模式 將乙個產品的內部表象與產品的生成過程分割開來。產品的內部表象 乙個產品常有不同的組成成分作為產品的零件,這些零件有可能是物件,也有可能不是物件,通常又叫做產品的內部表象。有哪些情況要使用建造模式 需要生成的產品物件有複雜的內部結構。每乙個內部成分本身可能是物件,也可以僅僅是乙個物件的乙個組...

十 建造模式

建造者模式用於建立一些複雜物件,這些物件內部構件間的建造順序通常是穩定的,但物件內部的構建通常面臨 著複雜的變化。摘自 大話設計模式 基本結構如下 產品,想要建立的複雜物件 抽象建造者 各個構件的抽象建造方法 得到產品的抽象方法 指揮者,指揮建造者 封裝建造順序的方法 產品的構建順序,構件a 構件b...