首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式實戰(二):Builder 建造者模式打造複雜對象構建流程

     編輯:Java 相關知識

模式定義與核心價值

  • 分步驟從簡單對象構建複雜對象
  • 僅指定類型與內容即可獲得複雜對象
  • 將構建過程與組件解耦、分離構建代碼與表現代碼
  • 程序員對構建過程擁有更精細控制

相關模式對比

模式關注點
Abstract Factory工廠層面,產品族創建
Builder基於簡單對象構建單一複雜對象的步驟與順序
Composite樹形結構組合複雜對象

實戰案例:建房子流程建模

四步驟固定流程

  1. 打地基
  2. 建框架
  3. 建室外
  4. 建室內

抽象建造者定義步驟介面

abstract class HouseBuilder {
    protected House house = new House();
    abstract public void buildFoundation();
    abstract public void buildFrame();
    abstract public void buildExterior();
    abstract public void buildInterior();
}

導演者強制執行順序

class WorkShop {
    public void construct(HouseBuilder hb) {
        hb.buildFoundation();
        hb.buildFrame();
        hb.buildExterior();
        hb.buildInterior();
    }
}

具體建造者:平房 vs 兩層樓

class OneStoryHouse extends HouseBuilder {
    public void buildFoundation() { house.setProgress("地基完成"); }
    public void buildFrame() { house.setProgress("框架完成"); }
    public void buildExterior() { house.setProgress("室外完成"); }
    public void buildInterior() { house.setProgress("室內施工中"); }
}

class TwoStoryHouse extends HouseBuilder {
    public void buildFoundation() { house.setProgress("地基完成"); }
    public void buildFrame() { house.setProgress("框架施工中"); }
    public void buildExterior() { house.setProgress("室外待開工"); }
    public void buildInterior() { house.setProgress("室內未開始"); }
}

產品類別

class House {
    private String type;
    private List features = new ArrayList();
    public void setProgress(String s) { features.add(s); }
    public String toString() { /* 格式化輸出 */ }
}

測試驗證

HouseBuilder one = new OneStoryHouse("2房2衛2車位1500呎");
HouseBuilder two = new TwoStoryHouse("4房4衛3車位5000呎");
WorkShop shop = new WorkShop();
shop.construct(one);
shop.construct(two);
System.out.println(one.showProgress());
System.out.println(two.showProgress());

執行結果

OneStoryHouse 2房2衛2車位1500呎
地基完成
框架完成
室外完成
室內施工中

TwoStoryHouse 4房4衛3車位5000呎
地基完成
框架施工中
室外待開工
室內未開始

擴展應用建議

  • 每個 `doXXX` 步驟可拆分為獨立類(門、窗、廚房等),實現組件復用
  • 披薩製作程序:每種配料設計為類,不同披薩組合不同配料,完美適用 Builder
  • 進階優化:引入 fluent interface(鏈式調用)提升 API 易用性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved