建造者模式

建造者模式

介绍

基本介绍

建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同的表现(属性)的对象

原则

  1. 将复杂对象的构建过程与其表示分离,使得构建过程可以独立地创建不同的表示。
  2. 可以通过不同的具体建造者来创建不同的表示,而无需修改客户端代码。

建造者模式的四个角色

Product (产品角色):一个具体的产品对象
Builder(抽象建造者):创建一个 Product 对象的各个部件指定的接口 / 抽象类
ConcreteBuilder (具体建造者):实现接口,构建和装配各个部件
Director(指挥者):构建一个使用 Builder 接口的对象。它主要是用于创建一个复杂的对象。

作用

  1. 隔离了客户与对象的生产过程
  2. 负责控制产品对象的生产过程

使用场景

1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 2、JAVA 中的 StringBuilder。

案例

// 产品类
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 parts:");
        System.out.println("Part A: " + partA);
        System.out.println("Part B: " + partB);
        System.out.println("Part C: " + partC);
    }
}

// 抽象建造者类
abstract class Builder {
    protected Product product = new Product();

    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract void buildPartC();

    public Product getResult() {
        return product;
    }
}

// 具体建造者类
class ConcreteBuilder extends Builder {
    @Override
    public void buildPartA() {
        product.setPartA("PartA");
    }

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

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

// 指挥者类
class Director {
    public Product construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}

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

注释:

  1. Product 类是产品类,它包含了多个组成部件(partA、partB、partC),通过 setPartX 方法设置每个部件的值,并通过 show 方法展示产品的组成部件。

  2. Builder 是抽象建造者类,定义了产品的构建过程和方法。其中 getResult 方法返回构建完成的产品对象。

  3. ConcreteBuilder 是具体建造者类,实现了抽象建造者类中定义的方法,完成具体产品的构建。

  4. Director 是指挥者类,负责控制建造过程。它通过传入具体的建造者对象来构建产品,调用建造者的方法按照一定的顺序进行构建,并返回构建完成的产品。

  5. 客户端代码中创建具体建造者对象和指挥者对象,通过指挥者的 construct 方法来构建产品。最后调用产品的 show 方法展示产品的组成部件。

优缺点

优点

  1. 分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
  2. 可以更好地控制构建过程,隐藏具体构建细节。
  3. 代码复用性高,可以在不同的构建过程中重复使用相同的建造者。

缺点

  1. 如果产品的属性较少,建造者模式可能会导致代码冗余。
  2. 建造者模式增加了系统的类和对象数量。