The HIRO Says

If you smell what The HIRO is cooking!!!

JavaBeans pattern

【テーマ】

コンストラクタの引数が多い場合、何か良い方法はないか?

【概要】

いわゆるJavaBeans。
特徴は以下の通り。

  1. privateかつfinalでないfieldを持つ。
  2. 引数なしのpublicなコンストラクタを持つ。
  3. fieldには、getter/setterを介してアクセスする。

【補足】

インスタンスを生成する場合は、(1)まずコンストラクタを呼び出し、(2)その後必要に応じてsetterを呼び出して、オブジェクトを完成させます。

NutritionFacts target = new NutritionFacts();
target.setServingSize(250);
target.setFat(0);
target.setSodium(5);

【コード例】

/**
 * 栄養成分表を表すエンティティクラス
 */
public class NutritionFacts {

// fields
    // 内容量(必須)
    private int servingSize;
    // 1人前の量(必須)
    private int servings;
    // カロリー(任意)
    private int calories;
    // 脂肪(任意)
    private int fat;
    // ナトリウム(任意)
    private int sodium;
    // 炭水化物(任意)
    private int carbohydrate;


// constructor
    public NutritionFacts() {
    }


// getter
    public int getServingSize() {
        return this.servingSize;
    }

    public int getServings() {
        return this.servings;
    }

    public int getCalories() {
        return this.calories;
    }

    public int getFat() {
        return this.fat;
    }

    public int getSodium() {
        return this.sodium;
    }

    public int getCarbohydrate() {
        return this.carbohydrate;
    }


// setter
    public void setServingSize(int servingSize) {
        this.servingSize = servingSize;
    }

    public void setServings(int servings) {
        this.servings = servings;
    }

    public void setCalories(int calories) {
        this.calories = calories;
    }

    public void setFat(int fat) {
        this.fat = fat;
    }

    public void setSodium(int sodium) {
        this.sodium = sodium;
    }

    public void setCarbohydrate(int carbohydrate) {
        this.carbohydrate = carbohydrate;
    }
}

【長所】

  1. telescoping constructor pattern と比較して、コンストラクタでのうっかりミスで項目の順番を間違えるということがなくなります。
  2. Java技術者には広く知られている技術なので、導入のコストが少なく済みます。

【短所】

オブジェクトの値の不変性は確保できません。