建立型模式——建造者模式
1.由來
在開發中經常有些複雜的物件,它們擁有一系列成員屬性,這些成員屬性中有些是引用型別的成員物件。而且在這些複雜物件中,通過不同的屬性生成
不同的物件;(比如:汽車 這個物件,通過不同的發動機製造出來之後,都是汽車 ,但是他的效能,價格是不同的)
2.定義
建造者模式(Builder
Pattern):將一個複雜的物件的構建過程與它的表示分離,使得同樣的構建過程可以建立不同的表示。
例:(汽車的生成過程和他的成品展現分開來,同樣的流程去生產,可以得到不同型號的汽車)
3.程式碼的實現
角色
在這樣的設計模式中,有以下幾個角色:
1、Builder:為建立一個產品物件的各個部件指定抽象介面。
2、ConcreteBuilder:實現Builder的介面以構造和裝配該產品的各個部件,定義並明確它所建立的表示,並提供一個檢索產品的介面。
3、Director:構造一個使用Builder介面的物件,指導構建過程。
4、Product:表示被構造的複雜物件。ConcreteBuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
ConcreteBuilder 1:
public class ManBuilder implements PersonBuilder {
Person person;
public ManBuilder() {
person = new Man();
}
public void buildbody() {
person.setBody("建造男人的身體");
}
public void buildFoot() {
person.setFoot("建造男人的腳");
}
public void buildHead() {
person.setHead("建造男人的頭");
}
public Person buildPerson() {
return person;
}
}
ConcreteBuilder 2:
public class WomanBuilder implements PersonBuilder {
Person person;
public WomanBuilder() {
person = new Woman();
}
public void buildbody() {
person.setBody(“建造女人的身體");
}
public void buildFoot() {
person.setFoot(“建造女人的腳");
}
public void buildHead() {
person.setHead(“建造女人的頭");
}
public Person buildPerson() {
return person;
}
}
Director:public class PersonDirector {
public Person constructPerson(PersonBuilder pb) {
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
Product:
public class Person {
private String head;
private String body;
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
public class Man extends Person {
public Man(){
System.out.println(“開始建造男人");
}
}
public class Woman extends Person {
public Woman(){
System.out.println(“開始建造女人");
}
}
測試:
public class Test{
public static void main(String[] args) {
PersonDirector pd = new PersonDirector();
Person womanPerson = pd.constructPerson(new ManBuilder());
Person manPerson = pd.constructPerson(new WomanBuilder());
}
}
4.模式的優點
- 在建造者模式中, 客戶端不必知道產品內部組成的細節,將產品本身與產品的建立過程解耦,使得相同的建立過程可以建立不同的產品物件。
- 每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者, 使用者使用不同的具體建造者即可得到不同的產品物件 。
- 可以更加精細地控制產品的建立過程 。將複雜產品的建立步驟分解在不同的方法中,使得建立過程更加清晰,也更方便使用程式來控制建立過程。
- 增加新的具體建造者無須修改原有類庫的程式碼,指揮者類針對抽象建造者類程式設計,系統擴充套件方便,符合“開閉原則”。
5.模式的缺點
- 建造者模式所建立的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。
- 如果產品的內部變化複雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大
6.應用場景
- 需要生成的產品物件有複雜的內部結構,這些產品物件通常包含多個成員屬性。
- 需要生成的產品物件的屬性相互依賴,需要指定其生成順序。
- 物件的建立過程獨立於建立該物件的類。在建造者模式中引入了指揮者類,將建立過程封裝在指揮者類中,而不在建造者類中。
- 隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品。
參考部落格:
相關文章
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 建造者模式模式
- 設計模式----建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式-建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- 建造者模式(Builder)模式UI
- Java建造者模式Java模式
- 4、建造者模式模式
- java設計模式-建造者模式Java設計模式
- 設計模式-建造者模式(Builder)設計模式UI
- 設計模式之【建造者模式】設計模式
- 設計模式之建造者模式設計模式
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- golang設計模式之建造者模式Golang設計模式
- Java 設計模式(二)《建造者模式》Java設計模式
- 設計模式實戰 - 建造者模式設計模式
- GoLang設計模式01 - 建造者模式Golang設計模式
- 極簡設計模式-建造者模式設計模式
- 設計模式之建造者模式(BuilderPattern)設計模式UI
- 建造者模式(Builder Pattern)模式UI
- 設計模式 #3 (原型模式、建造者模式)設計模式原型
- 設計模式(Swift) - 3.觀察者模式、建造者模式設計模式Swift
- 設計模式:建造者模式及在jdk中的體現,建造者模式和工廠模式區別設計模式JDK
- 設計模式【4】-- 建造者模式詳解設計模式
- Java設計模式之(三)——建造者模式Java設計模式
- Java基礎-建造者模式Java模式
- Java設計模式之模板方法模式和建造者模式Java設計模式
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- 折騰Java設計模式之建造者模式Java設計模式
- 嘻哈說:設計模式之建造者模式設計模式
- 設計模式快速學習(四)建造者模式設計模式
- 設計模式 --建類神器之建造者模式設計模式
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- 建造者模式讀取資料模式
- 設計模式系列之建造者模式(Builder Pattern)——複雜物件的組裝與建立設計模式UI物件
- 重學 Java 設計模式:實戰建造者模式Java設計模式