Builderパターン Java
デザインパターンの一つであるBuilderパターンについて記述する。
Builderパターンとは?
コンストラクタ引数が多いケースに有効なのがBuilderパターンである。
- 複雑なカプセル化が複雑なケースに適用することで、綺麗なソースコードでJavaオブジェクト の生成が可能
- コンストラクタ処理が肥大化せずに済む
- カプセル化をJaavクラス内部で行うことができる
- クラアントはInterfaceを利用するだけで済む
サンプルコード
Builder interface.1
2
3
4
5
6
7public 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
15public 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
20public 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
27public 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;
}
}