返回

一个模式,千种设计 - 建筑之王建造者模式

后端

当然,以下是一篇专业且符合要求的技术博客文章,您可以参考:

什么是建造者模式?

建造者模式(Builder Pattern)是创建型设计模式之一,它提供了一种创建复杂对象的最佳方式。这种设计模式将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的优点

建造者模式具有以下优点:

  • 代码复用:建造者模式可以将复杂对象的构建过程分解成多个步骤,这些步骤可以被复用,以创建不同的复杂对象。
  • 低耦合:建造者模式将复杂对象的构建与它的表示分离,使得这两部分可以独立变化,提高了代码的灵活性。
  • 可扩展性:建造者模式可以很容易地扩展,以创建新的复杂对象,而不需要修改现有的代码。

建造者模式的缺点

建造者模式也存在一些缺点:

  • 代码复杂性:建造者模式的代码可能比直接创建复杂对象更复杂。
  • 性能开销:建造者模式可能会增加一些性能开销,因为需要创建多个对象。

建造者模式的使用场景

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

  • 需要创建复杂的对象。
  • 需要创建不同表示的复杂对象。
  • 需要对复杂对象的构建过程进行控制。

建造者模式的实现

建造者模式的实现方式有很多种,最常见的一种是使用一个接口来定义复杂对象的构建过程,然后使用多个具体的建造者类来实现这个接口。

以下是一个使用建造者模式创建复杂对象的例子:

interface Builder {
    void buildPartA();
    void buildPartB();
    void buildPartC();
    Product getProduct();
}

class ConcreteBuilder1 implements Builder {
    private Product product;

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

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

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

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

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

class ConcreteBuilder2 implements Builder {
    private Product product;

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

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

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

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

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

class Director {
    private Builder builder;

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

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

class Product {
    private List<String> parts = new ArrayList<>();

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

    public String toString() {
        return String.join(",", parts);
    }
}

public class Main {
    public static void main(String[] args) {
        Builder builder1 = new ConcreteBuilder1();
        Director director1 = new Director(builder1);
        director1.construct();
        Product product1 = builder1.getProduct();
        System.out.println(product1);

        Builder builder2 = new ConcreteBuilder2();
        Director director2 = new Director(builder2);
        director2.construct();
        Product product2 = builder2.getProduct();
        System.out.println(product2);
    }
}

输出结果:

Part A,Part B,Part C
Part A',Part B',Part C'