今回はBuilderパターンをSpring Bootで実装します。実装の方法はLombokのライブラリを使用して実装します。Lombokとは、Java特有の冗長なコードをアノテーションベースで簡潔にしてくれるオープンソースのライブラリのことです。その中にBuilderアノテーションというものがあるので、そちらを使用して実装します。
そもそもBuilderパターンとはある特定のクラスをインスタンス化するときに使用する技術で、オブジェクトの生成過程を抽象化し、動的なオブジェクト生成が可能となります。
簡単な言葉で言うと、複数のコンストラクタを設定しなくても、様々なフィールドを持ったオブジェクトを柔軟に生成でき、引数の挿入順序を自由に設定できるということです。
詳しくは以前ご紹介した下記の記事(【java】実装ミスをなくす!Builderパターンをjavaで実装する)を参考にしてみてください。
インストール
ご自身の環境に合わせて、依存関係を追加してください。詳しくは以下のURLを参考にしてください。
project lombok
https://projectlombok.org/
Gradle
builde.gradleに下記の依存関係を追加してください。
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.22'
testCompileOnly 'org.projectlombok:lombok:1.18.22'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.22'
}
maven
pom.xmlに下記コードを追加してください。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
</dependencies>
実装
実装方法は極めて簡単で、目的のクラスにフィールドやメソッドを作成した後、@Builderのアノテーションを付与するだけです。これでBuilderパターンを実装できます。
import lombok.Builder;
@Builder
public class Home {
private final String basicMaterial; // 基礎素材
private final String outerWallMaterial; // 外壁素材
private final String outerWallColor; // 外壁色
private final String option; // 追加オプション
private final int numberOfFloors; // 階数
}
@Builderを付与することで生成されるコード
package com.example.samplegenerateauth;
public class Home {
private final String basicMaterial; // 基礎素材
private final String outerWallMaterial; // 外壁素材
private final String outerWallColor; // 外壁色
private final String option; // 追加オプション
private final int numberOfFloors; // 階数
Home(String basicMaterial, String outerWallMaterial, String outerWallColor,
String option, int numberOfFloors) {
this.basicMaterial = basicMaterial;
this.outerWallMaterial = outerWallMaterial;
this.outerWallColor = outerWallColor;
this.option = option;
this.numberOfFloors = numberOfFloors;
}
public static class HomeBuilder {
private String basicMaterial;
private String outerWallMaterial;
private String outerWallColor;
private String option;
private int numberOfFloors;
HomeBuilder() {
}
public HomeBuilder basicMaterial(final String basicMaterial){
this.basicMaterial = basicMaterial;
return this;
}
public HomeBuilder outerWallMaterial(final String outerWallMaterial){
this.outerWallMaterial = outerWallMaterial;
return this;
}
public HomeBuilder outerWallColor(final String outerWallColor){
this.outerWallColor = outerWallColor;
return this;
}
public HomeBuilder option(final String option){
this.option = option;
return this;
}
public HomeBuilder NumberOfFloors(final int numberOfFloors){
this.numberOfFloors = numberOfFloors;
return this;
}
public Home build() {
return new Home(basicMaterial, outerWallMaterial, outerWallColor, option, numberOfFloors);
}
}
public static HomeBuilder builder() {
return new HomeBuilder();
}
@Override
public String toString() {
return "Home.HomeBuilder(basicMaterial = " + this.basicMaterial + ", outerWallMaterial = " + this.outerWallMaterial + ", outerWallColor = " + this.outerWallColor + ", option = " + this.option + ", numberOfFloors = " + this.numberOfFloors + ")";
}
}
Builderパターンの実装は極めて簡単です。lombokにはゲッターやセッターを自動生成する@Getter/@Setter
やフィールドに値を入れる@Value
、nullを許容しない@NonNull
など便利な物が数多くあります。コードをすっきりさせることができるため、是非使用してみてください。