设计模式——创建型模式(二)

Builder(生成器)

目标

将一个较为复杂的对象的构建与表示分离,并且能够在多个构建过程之后构建出不同的表示。

结构

结构图

对于一个Builder它将会把生产过程中的产物放在自己这里,按照Director的调用方法的顺序来执行生产,最后有一个返回产物的方法。

协作

时序图

  1. 客户创建一个Director对象,并且配置相应的Builder;

  2. Builder处理Director的请求,将部件添加到产品中;

  3. 客户从Builder中检索获得产品。

使用情形

  1. 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时;

  2. 当构造过程必须允许被构造的对象有不同的表示时。

参与者

  • Builder

    为创建一个Product对象的各个部件制定抽象接口。

  • ConcreteBuilder

    实现Builder的接口并且定义明确他所创建的表示,再提供一个检索产品的接口。

  • Director

    一个使用Builder,指导整个生产过程的一个对象。

  • Product

    表示被生产的具体产品。(可以不使用一个抽象类来完成构造)

实例代码

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
interface Builder{
void addWheel();
void addEngine();
Car getCar();
}
class BenzBuilder implements Builder{
@Override
void addWheel() {}
@Override
void addEngine() {}
@Override
Benz getCar() {return new Benz();}
}
class Director {
private Builder builder
public Director(Builder builder){
this.builder = builder;
}
public Car construct() {
builder.addWheel();
builder.addEngine();
return builder.getCar();
}
}
public class Client{
public static void main(String[] args) {
BenzBuilder builder = new BenzBuilder();
Director director = new Director(builder);
Car c = director.construct();
c.run();
}
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2018 Alex's Blog All Rights Reserved.

Yifeng Tang hält Urheberrechtsansprüche.