一、什么是建造者(Builder)设计模式
将一个复杂对象的构建过程和它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式可以将一个产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
如果我们使用了建造者模式,那么用户只需要指定需要建造的类型就可以得到它们,而具体的建造过程和细节就不需要知道了。
二、建造者模式的使用场景
它主要是用于创建一些复杂的对象,这些对象的内部构建的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
怎么来理解这句话呢?举个例子:我们要创建一组不同类型产品,这些产品都有很多属性,创建过程又有很多道工序,但创建的流程(工序)大体上是一致的。如果没有使用建造者模式的时候,我们得紧盯创建的每一个步骤,生怕该步骤不对或者缺少了某一个步骤,并且每一个产品对象都得一步一步盯着,这样效率低下且容易出错。使用了建造者模式后,会有一个 Builder类(或接口)指定创建产品各个步骤(各个部分)的一个抽象类或接口,一个 Director类,实现 Builder类(或接口),它是一个指挥者,根据需求来创建产品。另外,还有一个甚至多个 ConcreteBuilder类,它们是具体的创建者,用于创建不同类型的产品,也需要实现 Builder类(或接口)。我们来看一下下面这张图就清晰了:
三、建造者模式写法举例
首先,先来一个 Product 类,包括产品的各种属性的描述,包括:产品名、长、宽、高、厚度、颜色等等。
public class Product { private String name; private Long length; private Long wide; private Long high; private Long thickness; private String color; public String getName() { return name; } public Product setName(String name) { this.name = name; return this; } public Long getLength() { return length; } public Product setLength(Long length) { this.length = length; return this; } public Long getWide() { return wide; } public Product setWide(Long wide) { this.wide = wide; return this; } public Long getHigh() { return high; } public Product setHigh(Long high) { this.high = high; return this; } public Long getThickness() { return thickness; } public Product setThickness(Long thickness) { this.thickness = thickness; return this; } public String getColor() { return color; } public Product setColor(String color) { this.color = color; return this; } @Override public String toString() { return "Product{" + "name='" + name + '\'' + ", length=" + length + ", wide=" + wide + ", high=" + high + ", thickness=" + thickness + ", color='" + color + '\'' + '}'; } }