JavaのデザインパターンBuilder

JavaのデザインパターンBuilder

Builderパターンはいくつかパターンがありますが、最後に.build()メソッドを使ってインスタンス生成するデザインパターンが良く使われているようです。

使いどころ

フィールド変数が多く、コンストラクタの引数が多くなってしまう場合はBuilderパターンを使います。コンストラクタの引数が多いと、順序とかわけわからなくなってしまいます。

メリット

  • イミュータブルなインスタンス生成が可能(Builderクラスを経由する為)
  • スレッドセーフ
  • コンストラクタの引数の意味が、Builderパターンによって視覚的にわかりやすくなる

特徴

  • staticなBuilderクラスを作成する
  • コンストラクタは不可視(private)にして、インスタンス生成できないようにする
  • buildメソッドでインスタンスを生成する(new)

サンプルソース

以下がBuilderパターンを使用しているHumanクラスです。

package jp.co.confrage;

public class Human {

  private String names;
  private Integer ages;
  private String hobby;

  private Human(String names, Integer ages, String hobby) { // 不可視コンストラクタ
    this.names = names;
    this.ages = ages;
    this.hobby= hobby;
  }

  public static Builder builder() { // static builderメソッド
    return new Builder();
  }

  public static class Builder {
    private String name;
    private Integer age;
    private String hobby;

    public Builder() {} // コンストラクタ

    public Builder setName(final String name) {
      this.name = name;
      return this;
    }

    public Builder setAge(final Integer age) {
      this.age = age;
      return this;
    }

    public Builder setHobby(final String hobby) { // オプション
      this.hobby = hobby;
      return this;
    }

    public Human build() { // buildでHumanインスタンス生成
      return new Human(this.name, this.age, this.hobby); // thisはbuilderクラスを指す
    }
  }
}

Lombokの@Builderアノテーションを使用してBuilderパターンを実装することも可能です。

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました