哇塞码农设计模式系列 -- 建造者模式

更新于2024-11-05 08:01:008 分钟4 千字3031357000
摘要

建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建复杂对象的不同组成部分,并且可以灵活地组装这些部分以创建新的对象。建造者模式将一个复杂对象的构建过程和它的表示分离,使得同样的构建过程可以创建不同的表示。

在建造者模式中,有以下几个角色:

  1. Builder(建造者):定义了创建产品各个部件的抽象接口。
  2. ConcreteBuilder(具体建造者):实现了 Builder 接口,负责具体产品各个部件的创建和装配。
  3. Product(产品):表示被构造的复杂对象。通常包含多个部件。
  4. Director(指挥者):负责调用建造者的方法来创建产品。Director 不直接创建产品,而是通过调用建造者的方法来完成产品的创建过程。

UML类图

PlantUML Image

Java示例

// 产品类
class Product {
    private String part1;
    private int part2;
    private boolean part3;

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public void setPart2(int part2) {
        this.part2 = part2;
    }

    public void setPart3(boolean part3) {
        this.part3 = part3;
    }

    @Override
    public String toString() {
        return "Product{" +
                "part1='" + part1 + '\'' +
                ", part2=" + part2 +
                ", part3=" + part3 +
                '}';
    }
}

// 抽象建造者
interface Builder {
    void buildPart1();
    void buildPart2();
    void buildPart3();
    Product getResult();
}

// 具体建造者
class ConcreteBuilder implements Builder {
    private Product product;

    public ConcreteBuilder() {
        this.product = new Product();
    }

    @Override
    public void buildPart1() {
        product.setPart1("Part 1");
    }

    @Override
    public void buildPart2() {
        product.setPart2(123);
    }

    @Override
    public void buildPart3() {
        product.setPart3(true);
    }

    @Override
    public Product getResult() {
        return product;
    }
}

// 指挥者
class Director {
    private Builder builder;

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.buildPart1();
        builder.buildPart2();
        builder.buildPart3();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建具体建造者
        Builder builder = new ConcreteBuilder();

        // 创建指挥者,并设置建造者
        Director director = new Director();
        director.setBuilder(builder);

        // 指挥者构建产品
        director.construct();

        // 获取构建好的产品
        Product product = builder.getResult();
        System.out.println(product);
    }
}

适用场景

建造者模式适用于以下场景:

  1. 创建复杂对象:当需要创建一个复杂对象,该对象由多个部分组成,并且这些部分的创建过程相对独立时,可以使用建造者模式。建造者模式将复杂对象的创建过程分解为多个步骤,并且每个步骤由一个具体建造者来负责,从而使得系统更易于理解和维护。
  2. 产品的构建过程稳定:当产品的构建过程相对稳定,但不同的具体建造者可以以不同的方式构建产品时,可以使用建造者模式。建造者模式允许在不同的具体建造者中实现产品的构建过程,从而实现了产品的多样化。
  3. 避免重叠构造函数:当一个类拥有多个属性,而且属性之间存在一定的依赖关系,如果使用重叠构造函数来创建对象,则容易出现构造函数参数列表过长、参数顺序容易混淆等问题。这时可以使用建造者模式,将对象的构建过程分解为多个步骤,并且通过链式调用来设置属性,从而避免了重叠构造函数的问题。
  4. 灵活配置对象的创建过程:当希望灵活配置对象的创建过程,并且允许在运行时动态地改变对象的构建过程时,可以使用建造者模式。建造者模式允许在客户端代码中动态地指定具体建造者,从而改变对象的构建过程。
  5. 创建不同表示的对象:当需要根据不同的需求创建不同表示的对象时,可以使用建造者模式。建造者模式允许通过不同的具体建造者来创建不同表示的对象,从而实现了同样的构建过程可以创建不同表示的对象。

总的来说,建造者模式适用于需要创建复杂对象、产品构建过程相对稳定但又存在多样性、需要避免重叠构造函数、希望灵活配置对象创建过程以及需要创建不同表示的对象等场景。它提供了一种灵活的方式来创建复杂对象,并且能够有效地解决对象构建过程中的一些问题。

评论区

你认为这篇文章怎么样?
  • great
    0
  • happy
    0
  • doubt
    0
  • boring
    0
  • bad
    0

0/2048