建造者模式(未完成)

建造者模式

  建造者模式(Builder),也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

建造者模式结构图

  生成器可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。

1.2.x 适用场景

  建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

1.2.x 代码结构

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

//产品类
public class Product {
List<String> parts = new ArrayList<>();

public void add(String part){
//增加产品部件
parts.add(part);
}

public void show(){
System.out.println("\n 产品 创建 ----");
for(String part : parts){
System.out.println(part);
}
}
}

//抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法
public abstract class Builder {
public abstract void buildPartA();
public abstract void buildPartB();
public abstract Product getResult();
}

//具体建造者类
public class ConcreteBuilder1 extends Builder {
private Product product = new Product();

@Override
public void buildPartA() {
product.add("部件A");
}

@Override
public void buildPartB() {
product.add("部件B");
}

@Override
public Product getResult() {
return product;
}
}

public class ConcreteBuilder2 extends Builder {
private Product product = new Product();

@Override
public void buildPartA() {
product.add("部件X");
}

@Override
public void buildPartB() {
product.add("部件Y");
}

@Override
public Product getResult() {
return product;
}
}

//指挥者类
public class Director {

public void construct(Builder builder){
builder.buildPartA();
builder.buildPartB();
}
}

//客户端代码
public class Main {
public static void main(String[] args) {
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();

director.construct(b1);
Product p1 = b1.getResult();
p1.show();

director.construct(b2);
Product p2 = b2.getResult();
p2.show();

}
}


参考:

🔗 《设计模式:可复用面向对象软件的基础》
🔗 《大话设计模式》