通俗易懂设计模式(建造者模式)

76 阅读3分钟

建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于创建复杂对象,这些对象的构建过程可能会很复杂,或者需要按照特定的顺序进行。

建造者模式的主要组成部分包括:

  1. 产品(Product):表示要创建的复杂对象。
  2. 抽象建造者(Builder):定义了一个抽象接口,用于指导具体建造者如何构建产品的各个部分。
  3. 具体建造者(ConcreteBuilder):实现了抽象建造者接口,具体实现了如何构建产品的各个部分。
  4. 指导者(Director):负责调用具体建造者的方法,按照特定的顺序构建产品。

建造者模式的优点:

  1. 分离了对象的构建和表示:建造者模式将对象的构建过程和表示分离,使得同样的构建过程可以创建不同的表示。
  2. 易于扩展:建造者模式可以通过添加新的具体建造者来扩展产品的构建过程,而不需要修改已有的代码。
  3. 提高了代码的可读性和可维护性:建造者模式将对象的构建过程和表示分离,使得代码更加清晰和易于维护。

Java 实现建造者模式的示例代码:

// 产品类
public class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void show() {
        System.out.println("Product: " + partA + ", " + partB + ", " + partC);
    }
}

// 抽象建造者接口
public interface Builder {
    void buildPartA();
    void buildPartB();
    void buildPartC();
    Product getProduct();
}

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

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

    @Override
    public void buildPartA() {
        product.setPartA("Part A");
    }

    @Override
    public void buildPartB() {
        product.setPartB("Part B");
    }

    @Override
    public void buildPartC() {
        product.setPartC("Part C");
    }

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

// 指导者类
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.getProduct();
        product.show();
    }
}

在这个示例中,我们定义了一个产品类 Product,它包含了三个部分:partA、partB 和 partC。接着,我们定义了一个抽象建造者接口 Builder,它包含了构建产品各个部分的方法。然后,我们实现了一个具体建造者类 ConcreteBuilder,它实现了抽象建造者接口,并具体实现了如何构建产品的各个部分。最后,我们定义了一个指导者类 Director,它负责调用具体建造者的方法,按照特定的顺序构建产品。

在客户端代码中,我们创建了一个具体建造者对象,并将其传递给指导者对象。然后,我们调用指导者的 construct() 方法来构建产品。最后,我们通过调用建造者的 getProduct() 方法获取构建好的产品,并调用产品的 show() 方法来显示产品的信息。