【デザインパターン】Builerパターン

Builderパターンのコード例です。

package org.example.builder;

public abstract class Builder {
    public abstract void buildPart1(Product product);
    public abstract void buildPart2(Product product);
}
package org.example.builder;

public class ConcreteBuilder extends Builder {
    private Product product;

    @Override
    public void buildPart1(Product product) {

    }

    @Override
    public void buildPart2(Product product) {

    }

    public Product getResult(){
        return product;
    }
}
package org.example.builder;

public class Director {
    private Builder builder;
    public Director(Builder builder)
    {
        super();
        this.builder = builder;
    }

    public void construct(Product product)
    {
        builder.buildPart1(product);
        builder.buildPart2(product);;
    }
}
package org.example.builder;

public class Main {
    public static void main(String[] args)
    {
        Product product = new Product();

        ConcreteBuilder concreteBuilder = new ConcreteBuilder();
        Director director = new Director(concreteBuilder);
        director.construct(product);
        Product result = concreteBuilder.getResult();
    }
}

処理に必要なデータを段階的に渡していき、最後に処理結果を取得するパターンです。

LaravelのSQLビルダがそれに近いですね。

Builderインターフェースを定義し、それをConcreteBuilderとして実装します。

DirectorのコンストラクタにConcreteBuilderを渡し、以後、Directorのconstructメソッドで必要なパラメータをBuilderに渡します。

結果はgetResultで取得します。