Java设计模式之建造者模式(Builder)

82 阅读2分钟

建造者模式(Builder Pattern)是一种创建型设计模式,用于构建复杂对象。它允许分步构造一个复杂对象,并允许按不同方式构建和表示复杂对象的部分。建造者模式通常包含以下几个角色:

  1. Builder(抽象建造者) :定义创建复杂对象的接口。
  2. ConcreteBuilder(具体建造者) :实现抽象建造者接口,构建和提供复杂对象。
  3. Product(产品角色) :复杂对象的表示。
  4. Director(指挥者) :负责构建对象的步骤,使用Builder接口。

建造者模式的典型代码结构如下:

// 产品类
public class Product {
    private List<String> parts;

    public void add(String part) {
        parts.add(part);
    }

    public void show() {
        System.out.println("Product Parts --");
        for (String part : parts) {
            System.out.println(part);
        }
    }
}

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

    public abstract void buildPartOne();
    public abstract void buildPartTwo();

    public Product getResult() {
        return product;
    }
}

// 具体建造者
public class ConcreteBuilder extends Builder {
    @Override
    public void buildPartOne() {
        product.add("Part One");
    }

    @Override
    public void buildPartTwo() {
        product.add("Part Two");
    }
}

// 指挥者
public class Director {
    public void construct(Builder builder) {
        builder.buildPartOne();
        builder.buildPartTwo();
    }
}

使用建造者模式的示例:

public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builder = new ConcreteBuilder();

        director.construct(builder);

        Product product = builder.getResult();
        product.show();
    }
}

输出结果:

Product Parts --
Part One
Part Two

建造者模式的优点包括:

  • 封装性:创建复杂对象的步骤被封装在建造者类中。
  • 灵活性:指挥者可以改变创建具体建造者对象的顺序,增加新的建造者不影响现有代码。
  • 独立性:用户不必知道复杂对象的内部表示,只通过建造者来创建对象。

缺点包括:

  • 类的数目增多:每增加一个产品类就要增加一个建造者类。
  • 性能问题:如果产品内部状态较少,建造者模式可能会使系统性能下降。

建造者模式适用于创建复杂对象的场景,特别是当对象的创建过程较为复杂或者需要构建多种不同的表示时。