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クラスを指す | |
} | |
} | |
} |
Lombokの@Builderアノテーションを使用してBuilderパターンを実装することも可能です。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^