代码
Product
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class Product {
private String parm1;
private String parm2;
public Product freshProduct(WorkerBuilder.ProductParms productParms){
this.parm1 = productParms.parm1;
this.parm2 = productParms.parm2;
return this;
}
public String toString(){
return "Product [parm1=" + parm1 + ", parm2=" + parm2 + "]";
}
}WorkerBuilder
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
28
29
30
31
32
33
34
35public class WorkerBuilder {
//持有产品的引用
Product product = new Product();
//参数内部类,隐藏构建逻辑
ProductParms productParms = new ProductParms();
public WorkerBuilder setParm1(String parm1) {
productParms.setParm1(parm1);
return this;
}
public WorkerBuilder setParm2(String parm2) {
productParms.setParm2(parm2);
return this;
}
public Product build(){
return product.freshProduct(productParms);
}
//实际set参数的内部类
class ProductParms {
public String parm1;
public String parm2;
public void setParm1(String parm1) {
this.parm1 = parm1;
}
public void setParm2(String parm2) {
this.parm2 = parm2;
}
}
}
构建者模式 vs. 工厂模式
工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象。我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;而如果使用建造者模式,则需要组装手、头、脚、躯干等部分,然后再把内裤外穿,于是一个超人就诞生了。