一、用途
当需要多个可选的初始化参数来创建对象时,使用 Builder 模式可以灵活配置初始化参数。
二、要素
- Product 类:定义要创建的产品。
- Builder 接口:实际Builder类的抽象接口,定义了各个组件装配方法buildPart(),每一个方法用于接收一个初始化参数;定义了获取装配好的产品的方法getResult()。
- ConcreteBuilder 类:实现了Builder接口的实际建造类。含有一个属性是对Product类实例的引用,buildPart()方法用来修改此实例,getResult()方法返回产品实例。
- Director 类:一个方法通过选用实际Builder类中的各个步骤方法来生产一个对象并返回。
- 示例图:

三、优缺点
- 将产品的创建和产品的表示(属性和方法)进行分离,创建产品时对客户隐藏了产品的表示。
- 实现对复杂产品的更精细控制。
- 当产品的初始化参数很多时,Builder 类需要定义很多的方法。
- 当产品的初始化参数的选用复杂多变时,需要 Director 类有更多的方法来生产多种产品。
四、变体:Builder 类在产品类的内部
- Product pd = new Product.Builder().step1().step2().build()
