一、用途

当需要多个可选的初始化参数来创建对象时,使用 Builder 模式可以灵活配置初始化参数。

二、要素

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

建造者模式.jpg

三、优缺点

  • 将产品的创建和产品的表示(属性和方法)进行分离,创建产品时对客户隐藏了产品的表示。
  • 实现对复杂产品的更精细控制。
  • 当产品的初始化参数很多时,Builder 类需要定义很多的方法。
  • 当产品的初始化参数的选用复杂多变时,需要 Director 类有更多的方法来生产多种产品。

四、变体:Builder 类在产品类的内部

  • Product pd = new Product.Builder().step1().step2().build()