1. 程式人生 > 實用技巧 >Java23種設計模式之建立型模式「建造者模式」

Java23種設計模式之建立型模式「建造者模式」

建造者模式

  • 將一個複雜物件的構建與表示分離開來,使用多個簡單的物件一步一步構建成一個複雜的物件,它提供了一種建立物件的最佳方式
  • 用於構建多樣化的物件,替代物件的構建函式,更加自由化

定義物件

/**
 * 產品物件
 *
 * @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='專案開發團隊'}