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で取得します。