Java23種設(shè)計模式之創(chuàng)建型模式「建造者模式」

建造者模式

  • 將一個復(fù)雜對象的構(gòu)建與表示分離開來,使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象,它提供了一種創(chuàng)建對象的最佳方式
  • 用于構(gòu)建多樣化的對象,替代對象的構(gòu)建函數(shù),更加自由化

定義對象

/**
 * 產(chǎn)品對象
 *
 * @author Mr.lim
 */
public class ProductInfo {

    // 產(chǎn)品名稱
    private String name;

    // 產(chǎn)品期限
    private String term;

    // 開發(fā)團隊
    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();
}

定義功能接口實現(xiàn),這里可以根據(jù)需求,實現(xiàn)不能的功能

public class ProductInfoBuilderImpl implements ProductInfoBuilder {

    private ProductInfo productInfo;

    public ProductInfoBuilderImpl () {
        System.out.println("Builder");
        productInfo = new ProductInfo();
    }

    @Override
    public void builderProductInfoName() {
        System.out.println("設(shè)定項目名稱相關(guān)邏輯");
        productInfo.setName("項目名稱");
    }

    @Override
    public void builderProductInfoTerm() {
        System.out.println("設(shè)定項目周期相關(guān)邏輯");
        productInfo.setTerm("項目周期");
    }

    @Override
    public void builderProductInfoTeam() {
        System.out.println("設(shè)定項目開發(fā)團隊相關(guān)邏輯");
        productInfo.setTeam("項目開發(fā)團隊");
    }

    @Override
    public ProductInfo startProduct() {
        return productInfo;
    }
}

導(dǎo)演:管理建造出來的實例的依賴關(guān)系

/**
 *
 * @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());
    }
}

輸出的結(jié)果:

Builder
設(shè)定項目名稱相關(guān)邏輯
設(shè)定項目周期相關(guān)邏輯
設(shè)定項目開發(fā)團隊相關(guān)邏輯
ProductInfo{name='項目名稱', term='項目周期', team='項目開發(fā)團隊'}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容