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 hobbies;
private Human(String names, Integer ages, String hobbies) { // 不可視コンストラクタ
this.names = names;
this.ages = ages;
this.hobbies = hobbies;
}
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クラスを指す
}
}
}

view raw
Human.java
hosted with ❤ by GitHub

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

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA