建造者模式

建造者模式

将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示

建造者最主要的功能是基本方法的调用顺序安排,也就是这些方法已经实现了,通俗的说就是零件的装配。而工厂方法则重点是创建,创建零部件是他的主要职责,组装顺序不是他关心的

优点

  1. 各个具体的建造者相互独立,有利于系统的扩展。
  2. 客户端不必知道产品内部组成的细节,便于控制细节风险。

缺点

  1. 产品的组成部分必须相同,这限制了其使用范围。
  2. 如果产品的内部变化复杂,该模式会增加很多的建造者类。

使用场景

  1. 相同的方法,不同的执行顺序而产生不同的结果
  2. 多个部件都可以组装到一个产品中,但产生的结果要求不同

通用类图

代码实现

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
public class Director {
private final AbstractBuilder concreteBuilder = new ConcreteBuilder();
public Product createProduct() {
// 构建产品不同的部件
concreteBuilder.buildPart();
return concreteBuilder.buildProduct();
}

}

public abstract class AbstractBuilder {
/**
* 构建零部件
*/
public abstract void buildPart();

/**
* 构建产品
* @return Product
*/
public abstract Product buildProduct();
}

public class ConcreteBuilder extends AbstractBuilder {

private final Product product = new Product();

@Override
public void buildPart() {
// 构建差异部分,即产品内部逻辑不同的部分
}

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

public class Product {}

public class Client {
public static void main(String[] args) {
Director director = new Director();
director.createProduct();
}
}