Builderパターン Java

2015/07/25

Builderパターン Java

デザインパターンの一つであるBuilderパターンについて記述する。

Builderパターンとは?



コンストラクタ引数が多いケースに有効なのがBuilderパターンである。

  • 複雑なカプセル化が複雑なケースに適用することで、綺麗なソースコードでJavaオブジェクト の生成が可能
  • コンストラクタ処理が肥大化せずに済む
  • カプセル化をJaavクラス内部で行うことができる
  • クラアントはInterfaceを利用するだけで済む

サンプルコード

Builder interface.

1
2
3
4
5
6
7
public interface Builder { 
void addSolute(double amount);

void addSolvent(double amount);

Object getResult();
}

Directorクラス.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Director {

private Builder builder;

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

public void contract() {
builder.addSolvent(10);
builder.addSolute(20);
builder.addSolvent(30);
builder.addSolute(40);
}
}

Builder実装クラス.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class BuilderImpl implements Builder { 

private Water water;

public BuilderImpl(){
this.water = new Water(0, 0);
}

public void addSolute(double amount) {
this.water.setSalt(amount);
}

public void addSolvent(double amount) {
this.water.setWater(amount);
}

public Object getResult(){
return this.saltWater;
}
}

Entityクラス.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class SaltWater {

private double salt;

private double water;

public SaltWater(double water, double salt) {
this.salt = salt;
this.water = water;
}

public double getSalt() {
return this.salt;
}

public double getWater() {
return this.water;
}

public void setSalt(double salt) {
this.salt = salt;
}

public void setWater(double water) {
this.water = water;
}
}