建造者模式

建造者模式

属于创建者模式

建造者模式将一个复杂对象的构建和对象分离,实现解耦;
比如一辆汽车的创建,需要一整套过程和很多的部件,建造者模式实现了将部件和过程分离

为什么使用建造者模式

是为了将创建一个复杂对象的过程与它的属性解耦

使用建造者模式

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// 产品
public class Product {
@Override
public String toString() {
return "Product{" +
"wheel='" + wheel + '\'' +
", engine='" + engine + '\'' +
", chassis='" + chassis + '\'' +
'}';
}
// 模拟汽车 轮子 发动机 底盘
private String wheel;
private String engine;
private String chassis;
public String getWheel() { return wheel;}
public void setWheel(String wheel) {this.wheel = wheel; }
public String getEngine() { return engine;}
public void setEngine(String engine) { this.engine = engine;}
public String getChassis() { return chassis; }
public void setChassis(String chassis) { this.chassis = chassis; }
}

// 抽象建造者
public interface Builder {
// 创建组件A
void buildPartA();
// 创建组件B
void buildPartB();
// 创建组件C
void buildPartC();
Product getResult();
}

// 建造者的具体实现
public class ConcreteBuilder implements Builder {
private Product product;
public ConcreteBuilder() {
this.product = new Product();
}
@Override
public void buildPartA() {product.setWheel(new String("米其林轮胎")); }
@Override
public void buildPartB() {product.setEngine(new String("三菱发动机")); }
@Override
public void buildPartC() {product.setChassis(new String("宝马底盘")); }
@Override
public Product getResult() {return product; }
}

// 指挥者
// 客户端直接利用指挥者创建对象, 给指挥者传入一个建造者实例
public class Diector {
private Builder builder;
public void setBuilder(Builder builder) {
this.builder = builder;
}
public Diector(Builder builder){
this.builder=builder;
}
public Product construct(){
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}