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パターンを実装することも可能です。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^

コメント