介紹
提起builder,我們第一時間想到的就是建築物,高樓大廈。在建造高樓大廈的時候,需要先打地基,搭建建築框架,然後自下而上地一層一層蓋起來。通常,在建造這種具有複雜結構的物體時,很難一氣呵成。我們需要首先建造組成這個物體的各個部分,然後分階段將它們組裝起來。而建造者模式(builder pattern),顧名思義,正是為建造複雜的物件而存在。
建造者模式的定義:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
實現
在建造者模式中,一共有以下五個角色:
builder(建造者)
builder角色負責定義用於生成例項的介面。
concretebuilder(當前建造者)
concretebuilder角色是負責實現builder角色的介面的類。這裡定義了在生成例項時實際上被呼叫的方法。
director(導演類)
director角色負責使用builder角色的介面來生成例項。它並不依賴於concretebuilder角色。為了確保不論concretebuilder角色是如何被定義的,director角色都能正常工作,它只呼叫在builder角色中被定義的方法。
product(產品類)
這是乙個具體類而不是抽象類,一般來說會是乙個比較複雜的物件,即建立例項的過程比較複雜(步驟多或者步驟順序有要求等等)。
client(使用者)
client是最終使用builder模式的使用者。
下面,我們寫一段金拱門製作漢堡**的示例程式。
建造者
public abstract class builder
當前建造者public class concretebuilder extends builder
@override
public void builddrink()
@override
public void buildrefreshments()
@override
public void getproduct()
}
導演類public class director
public void construct()
}
產品類public class product
public void sethamburgername(string hamburgername)
public string getrefreshmentname()
public void setrefreshmentname(string refreshmentname)
public string getdrinkname()
public void setdrinkname(string drinkname)
}
使用者public class client
}
輸出結果巨無霸**:巨無霸漢堡x1+麥樂雞x4+純牛奶x1建造者模式總結優點1)封裝性好。建造者模式將複雜物件的建立依次拆分,並且封裝在了各個builder類內部,外部呼叫的人只需要正確的呼叫建造者和導演類就能建立物件,而不用關心內部是如何構建的。
2)易擴充套件。有新需求時,只需要新建乙個新的建造者類就可以實現,不用去修改之前的**,擴充套件很方便,也不會對既存的業務邏輯產生影響。
缺點
1)使用建造者模式,需要各個產品的建立過程具有很大的相似度,如果產品構建差異過大,則不適合使用建造者模式。
2)和工廠模式一樣,產品擴充套件的越多,具體的建造者類也就越多,一定程度上增加了系統的複雜度。
和工廠模式區別
工廠模式將物件的建立過程全部封裝在了工廠類裡面,而建造者模式的各個建造者類只負責各個元件的建立,最後物件的組裝由導演類來完成。
因此,相對於工廠模式來說,建造者模式適用於更複雜物件的建立。
java設計模式之建造者模式
概念 建造者模式是指把乙個複雜物件的構建和表示分離,就像建房子一樣,每乙個房子的建造流程都是相同的,但是卻會有很多形狀不一,樣式不同的房子,這裡的房子實際上就是房子這個物件的表示,建造的流程就是房子物件的構建 建造者模式的構成部分 1.builder介面 builder介面設計要表示物件的構建流程,...
Java設計模式之建造者模式
builder模式也叫建造者模式或者生成器模式,是由gof提出的23種設計模式中的一種。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動 態地建立具有復合屬性的物件。具體的構建物件 房子 public class h...
JAVA設計模式之建造者模式
分離物件子元件,子元件單獨構造 由builder來負責 和裝配模式 由director負責 從而可以構造出複雜物件。這個模式適用於某個物件構造特別複雜。由於實現了構建和裝配的解耦。不同的構建器,相同的裝配,也可以生產不同的物件的物件 相同的構建器和不同的裝配順序也可以構造不同的物件,這樣實現了構建演...