1、基本介绍

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 建造者模式涉及到以下四个角色的概念:

  • 产品角色:该角色是建造的复杂对象,提供基本方法。
  • 抽象建造者角色:提供一个接口,规范产品对象的建造,一般由子类实现。一般来说,产品的组成部分数与建造方法数相同,即有多少组成部分,就有多少个建造方法。
  • 具体建造者角色:该角色实现了抽象建造者抽象建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。
  • 导演者角色:负责调用具体建造者按照顺序建造产品。导演者只负责调度,真正执行的是具体建造者角色。

2、具体实现

假设我们想造一辆车,该如何实现呢?

  • 定义产品角色

    1. public class CarProduction {
    2. private String carHead;
    3. private String carBody;
    4. public String getCarHead() {
    5. return carHead;
    6. }
    7. public void setCarHead(String carHead) {
    8. this.carHead = carHead;
    9. }
    10. public String getCarBody() {
    11. return carBody;
    12. }
    13. public void setCarBody(String carBody) {
    14. this.carBody = carBody;
    15. }
    16. }
  • 定义抽象建造者

    1. public interface Ibuilder {
    2. public void buildHead();
    3. public void buildBody();
    4. public CarProduction build();
    5. }
  • 定义具体建造者

    1. public class BenchiBuilder implements Ibuilder {
    2. private CarProduction production = new CarProduction();
    3. @Override
    4. public void buildHead() {
    5. System.out.println("生产奔驰车头");
    6. production.setCarHead("生产奔驰车头");
    7. }
    8. @Override
    9. public void buildBody() {
    10. System.out.println("生产奔驰车身");
    11. production.setCarBody("生产奔驰车身");
    12. }
    13. @Override
    14. public CarProduction build() {
    15. System.out.println("车造完了");
    16. return production;
    17. }
    18. }
  • 创建导演者 ```java public class Director { private Ibuilder ibuilder;

    public Director(Ibuilder ibuilder) {

    1. this.ibuilder = ibuilder;

    }

    public CarProduction buildCar() {

      ibuilder.buildHead();
      ibuilder.buildBody();
      return ibuilder.build();
    

    } }


- 运行
```java
public class demo {
    public static void main(String[] args) {
        // 造奔驰车
        Director directorA = new Director(new BenchiBuilder());
        directorA.buildCar();
    }
}

image.png