一、什么是建造模式:
建造模式可以將一個產品的內部表象與產品的生成過程分割開來,從而使一個建造過程生成具有不同內部表象的產品。客戶端不需要知道產品內部的結構和生產過程。
二、建造模式的結構:
Builder(抽象建造者角色):一個抽象的建造者父類結構,規定產品對象各個組成成分的建造。
ConcreteBuilder(產品的具體建造者):繼承抽象建造者角色,實現建造方法buildPart1()、builderPart2(),完成產品零件實例的創建;返回產品實例的方法retrieveResultProuduct(),一般而言零件數和產品的建造方法數相同。
Prouduct(產品):具體建造者建造的對象。
Director(導演者角色):調用具體產品的創建者 ,獲取產品對象。
總之,導演者角色與客戶端直接打交道,導演者角色將客戶端創建產品的請求划分為對各個零件的建造請求,再將這些請求委托給具體的建造者角色,具體建造者角色生產具體的零件,不被客戶端所知。

1 /** 2 * 建造者模式產品對象 3 * 4 * @author ZhouDX 5 * @since 2019/3/6 22:02:58 6 */ 7 public class Product { 8 /** 9 * 產品Id 10 */ 11 private String prouductId; 12 /** 13 * 產品價格 14 */ 15 private String price; 16 17 public String getProuductId() { 18 return prouductId; 19 } 20 21 public void setProuductId(String prouductId) { 22 this.prouductId = prouductId; 23 } 24 25 public String getPrice() { 26 return price; 27 } 28 29 public void setPrice(String price) { 30 this.price = price; 31 } 32 33 @Override 34 public String toString() { 35 return "Product{" + "prouductId='" + prouductId + '\'' + ", price='" + price + '\'' + '}'; 36 } 37 }

1 /** 2 * 建造者模式建造者 3 * 4 * @author ZhouDX 5 * @since 2019/3/6 21:54:40 6 */ 7 public interface Builder { 8 /** 9 * 建造方法1 10 */ 11 public void method1(); 12 13 /** 14 * 建造方法2 15 */ 16 public void method2(); 17 18 /** 19 * 返回產品 20 */ 21 public Product returnResult(); 22 }

1 /** 2 * @author ZhouDX 3 * @since 2019/3/6 22:04:22 4 */ 5 public class ConcreteBuilder implements Builder { 6 private Product product = new Product(); 7 8 @Override 9 public void method1() { 10 product.setProuductId("10000001"); 11 } 12 13 @Override 14 public void method2() { 15 product.setPrice("100"); 16 } 17 18 @Override 19 public Product returnResult() { 20 return product; 21 } 22 }

1 /** 2 * @author ZhouDX 3 * @since 2019/3/6 22:07:41 4 */ 5 public class Director { 6 private Builder builder; 7 8 /** 9 * 各個零件生產,獲得完整的對象 10 */ 11 public void constructor() { 12 builder = new ConcreteBuilder(); 13 builder.method1(); 14 builder.method2(); 15 builder.returnResult(); 16 } 17 public Builder getBuilder() { 18 return builder; 19 } 20 }

1 /** 2 * @author ZhouDX 3 * @since 2019/3/12 22:45:02 4 */ 5 public class Client { 6 public static void main(String[] args) { 7 Director director = new Director(); 8 director.constructor(); 9 Product product = director.getBuilder().returnResult(); 10 System.out.println(product.toString()); 11 } 12 }
三、建造模式的實質:
建造模式利用一個導演者對象和具體建造者對象一個一個的建造出所有的零件,從而建造出完整的產品對象。建造者模式將產品的結構和產品的零件建造過程對客戶端隱藏起來,把對建造過程的指揮的責任和具體建造者零件的責任分割開來,達到責任划分和封裝的目的。