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(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント