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

Effective Java 條目 2:構造器參數過多時採用 Builder 模式構建對象

     編輯:Java 綜合教學

Builder 模式解決構造器參數過多問題

當構造器參數超過 4-5 個時,可讀性與調用方便性急劇下降。《Effective Java》推薦使用 Builder 模式。

實戰代碼:NutritionFacts 營養成分表

public class NutritionFacts {
    private final int param1, param2, param3, param4, param5, param6, param7;

    private NutritionFacts(Builder builder) {
        this.param1 = builder.param1; this.param2 = builder.param2;
        this.param3 = builder.param3; this.param4 = builder.param4;
        this.param5 = builder.param5; this.param6 = builder.param6;
        this.param7 = builder.param7;
    }

    public static class Builder {
        // 必填參數
        private final int param1, param2;
        // 可選參數,默認值 0
        private int param3 = 0, param4 = 0, param5 = 0, param6 = 0, param7 = 0;

        public Builder(int param1, int param2) { this.param1 = param1; this.param2 = param2; }

        public Builder param3(int v) { param3 = v; return this; }
        public Builder param4(int v) { param4 = v; return this; }
        public Builder param5(int v) { param5 = v; return this; }
        public Builder param6(int v) { param6 = v; return this; }
        public Builder param7(int v) { param7 = v; return this; }

        public NutritionFacts build() { return new NutritionFacts(this); }
    }

    public static void main(String[] args) {
        NutritionFacts nf = new NutritionFacts.Builder(1, 2)
            .param3(3).param4(4).param5(5).param6(6).param7(7)
            .build();
    }
}

優勢總結

  • 鏈式調用:代碼閱讀如敘述語句,參數名自文檔化。
  • 不可變對象:構建完成後所有字段 final,線程安全。
  • 靈活驗證:build() 中可集中校驗參數組合合法性。
  • 可變參數支持:Builder 可接受可變長參數或集合。

適用場景:領域模型構建、請求參數組裝、配置對象創建等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved