JAVA設計模式之 建造者模式【Builder Pattern】
一、概述
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。核心在於如何一步步構建一個包含多個組成部件的完整物件,使用相同的構建過程構建不同的產品,建造者模式是一種物件建立型模式。
二、適用場景:複雜物件的組裝和建立
(1) 用於複雜物件的組裝和建立、物件間通常具有較多的共同點或是組成部分相似;
(2) 需要生成的物件的屬性相互依賴,需要指定其生成順序的情況;
(3) 物件的建立過程獨立於建立該物件的類,隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品;
三、UML類圖結構
四、參與者
1、Builder(抽象建造者):它為建立一個產品Product物件的各個部件指定抽象介面,並有方法返回產品物件。
2、ConcreteBuilder(具體建造者):它實現了Builder介面或抽象方法,實現各個部件的具體構造和裝配方法,定義並明確它所建立的複雜物件。
3、Product(產品角色):它是被構建的複雜物件,通常包含多個組成部件。
4、Director(指揮者):它負責安排複雜物件的建造次序,指揮者與抽象建造者之間存在關聯關係,可以在其construct()建造方法中呼叫建造者物件的部件構造與裝配方法,完成複雜物件的建造。
五、用例學習
1、被建造的物件:產品類 Product.java
/**
* 被建造的物件:產品
* @author lvzb.software@qq.com
*
*/
public class Product {
// 產品部件A
private String partA;
// 產品部件B
private String partB;
// 產品部件C
private String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
}
2、抽象建造者類[也可以為介面] Builder.java
/**
* 抽象建造者
* @author lvzb.software@qq.com
*
*/
public abstract class Builder {
protected Product product = new Product();
protected abstract void buildPartA();
protected abstract void buildPartB();
protected abstract void buildPartC();
public Product getProduct(){
return product;
}
}
3、具體的複雜產品的建造者類 ConcreteBuilder.java
/**
* 具體的建造者物件<br>
* 建造複雜產品的各個組成部件、最後由指揮者類<Director>進行組裝成完整的產品物件
* @author lvzb.software@qq.com
*
*/
public class ConcreteBuilder extends Builder {
@Override
protected void buildPartA() {
product.setPartA("build Part A");
System.out.println("正在建造產品部件A");
}
@Override
protected void buildPartB() {
product.setPartB("build Part B");
System.out.println("正在建造產品部件B");
}
@Override
protected void buildPartC() {
product.setPartC("build Part C");
System.out.println("正在建造產品部件C");
}
}
4、複雜產品的組裝 指揮者類:Director.java
/**
* 指揮者<br>
* 負責 安排/組裝 複雜物件的建造次序
* @author lvzb.software@qq.com
*
*/
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
/**
* 產品物件的構建與組裝
* @return
*/
public Product construct(){
System.out.println("--- 指揮者開始 構建產品 ---");
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
System.out.println("--- 指揮者 構建產品 完成 ---");
return builder.getProduct();
}
}
5、客戶端呼叫測試類:Client.java
public class Client {
public static void main(String[] args) {
ConcreteBuilder cBuilder = new ConcreteBuilder();
Director director = new Director(cBuilder);
director.construct();
}
}
6、程式執行效果:
--- 指揮者開始 構建產品 ---
正在建造產品部件A
正在建造產品部件B
正在建造產品部件C
--- 指揮者 構建產品 完成 ---
六、其他
在建造者模式中,客戶端不必知道產品物件內部組成的細節,將產品本身與產品的建立過程解耦;每一個具體的建造者都相對獨立,可以方便修改/新增具體的建造者而不會對其他的建造者造成影響、使系統擴充套件方便,符合“開閉原則”。
相關文章
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- Java設計模式之建造者模式(Builder)Java設計模式UI
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- 建造者模式(Builder Pattern)模式UI
- Java設計模式----建造者模式(Builder)Java設計模式UI
- 設計模式之-建造者模式-Builder設計模式UI
- 設計模式-建造者模式(Builder)設計模式UI
- 設計模式系列之建造者模式(Builder Pattern)——複雜物件的組裝與建立設計模式UI物件
- 設計模式--建造者模式Builder(建立型)設計模式UI
- JAVA設計模式之建造者模式Java設計模式
- 設計模式實戰系列之@Builder和建造者模式設計模式UI
- 我所理解的設計模式(C++實現)——建造者模式(Builder Pattern)設計模式C++UI
- 人人都會設計模式---建造者模式--Builder設計模式UI
- C#設計模式系列:建造者模式(Builder)C#設計模式UI
- Java設計模式之(三)——建造者模式Java設計模式
- 建造者模式(Builder)模式UI
- 人人都會設計模式: 07、建造者模式--Builder設計模式UI
- 設計模式的征途—6.建造者(Builder)模式設計模式UI
- 設計模式總結篇系列:建造者模式(Builder)設計模式UI
- 折騰Java設計模式之建造者模式Java設計模式
- java設計模式-建造者模式Java設計模式
- 設計模式之建造者模式設計模式
- 設計模式之【建造者模式】設計模式
- JAVA設計模式之 中介者模式【Mediator Pattern】Java設計模式
- Java設計模式之模板方法模式和建造者模式Java設計模式
- Java 設計模式(二)《建造者模式》Java設計模式
- golang設計模式之建造者模式Golang設計模式
- 設計模式系列之「建造者模式」設計模式
- Java設計模式之裝飾者模式(Decorator pattern)Java設計模式
- Java設計模式之builder模式Java設計模式UI
- 我的Java設計模式-建造者模式Java設計模式
- 設計模式之建造者模式(BuilderPattern)設計模式UI
- 23種設計模式之--建造者模式設計模式
- 23種設計模式之建造者模式設計模式
- JAVA設計模式之 訪問者模式【Visitor Pattern】Java設計模式
- 設計模式-建造者模式設計模式
- 設計模式 --建造者模式設計模式