一、什么是建造者(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 + '\'' +
            '}';
  }
}
Product

相关文章:

猜你喜欢
  • 2021-08-04
  • 2021-07-16
  • 2022-03-04
  • 2021-04-20
  • 2021-08-07
  • 2021-08-07
相关资源
相似解决方案