Java23種設計模式之建立型模式「建造者模式」
阿新 • • 發佈:2020-07-28
建造者模式
- 將一個複雜物件的構建與表示分離開來,使用多個簡單的物件一步一步構建成一個複雜的物件,它提供了一種建立物件的最佳方式
- 用於構建多樣化的物件,替代物件的構建函式,更加自由化
定義物件
/** * 產品物件 * * @author Mr.lim */ public class ProductInfo { // 產品名稱 private String name; // 產品期限 private String term; // 開發團隊 private String team; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTerm() { return term; } public void setTerm(String term) { this.term = term; } public String getTeam() { return team; } public void setTeam(String team) { this.team = team; } @Override public String toString() { return "ProductInfo{" + "name='" + name + '\'' + ", term='" + term + '\'' + ", team='" + team + '\'' + '}'; } }
定義功能介面
public interface ProductInfoBuilder {
void builderProductInfoName();
void builderProductInfoTerm();
void builderProductInfoTeam();
ProductInfo startProduct();
}
定義功能介面實現,這裡可以根據需求,實現不能的功能
public class ProductInfoBuilderImpl implements ProductInfoBuilder { private ProductInfo productInfo; public ProductInfoBuilderImpl () { System.out.println("Builder"); productInfo = new ProductInfo(); } @Override public void builderProductInfoName() { System.out.println("設定專案名稱相關邏輯"); productInfo.setName("專案名稱"); } @Override public void builderProductInfoTerm() { System.out.println("設定專案週期相關邏輯"); productInfo.setTerm("專案週期"); } @Override public void builderProductInfoTeam() { System.out.println("設定專案開發團隊相關邏輯"); productInfo.setTeam("專案開發團隊"); } @Override public ProductInfo startProduct() { return productInfo; } }
導演:管理建造出來的例項的依賴關係
/** * * @author Mr.lim */ public class Director { public ProductInfo startProductDirector(ProductInfoBuilder productInfoBuilder) { productInfoBuilder.builderProductInfoName(); productInfoBuilder.builderProductInfoTerm(); productInfoBuilder.builderProductInfoTeam(); return productInfoBuilder.startProduct(); } public static void main(String[] args) { Director director = new Director(); ProductInfo productInfo = director.startProductDirector(new ProductInfoBuilderImpl()); System.out.println(productInfo.toString()); } }
輸出的結果:
Builder
設定專案名稱相關邏輯
設定專案週期相關邏輯
設定專案開發團隊相關邏輯
ProductInfo{name='專案名稱', term='專案週期', team='專案開發團隊'}