设计模式好好学六(建造者模式)

设计模式好好学六(建造者模式)

        建造者模式是Java中一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程分解为多个简单对象的构建过程,并且使这些构建过程按照一定的顺序进行组装,最终实现对复杂对象的创建

1、前言

        当我们需要创建一个具有多个属性或组件的对象时,通常需要使用大量的构造函数和setter方法。随着属性或组件的增加,这种方式很容易变得混乱和难以维护。此时,建造者模式就可以很好地解决这个问题

        建造者模式将对象的构建过程分解为多个步骤,由调用端根据需要选择所需的步骤,并按照一定的顺序进行组装,最终实现对复杂对象的创建。通过使用建造者模式,可以将对象的构建过程和具体的构建实现分离开来,从而提高代码的可维护性和可读性。

2、定义

        将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。换句话说,建造者模式将对象的构建过程分解为多个简单对象的构建过程,并按照一定的顺序进行组装,从而实现对复杂对象的创建。通过使用建造者模式,可以使对象的构建过程和具体的构建实现相互独立,从而提高代码的可维护性和可读性。

3、结构

  • 产品类(Product)

        产品类是一个具有多个属性或组件的复杂对象,它由多个简单对象组成

public class Product {
    private String part1;
    private String part2;
    private String part3;
    // 省略 getter 和 setter 方法
}
  • 抽象建造者(Builder)

        建造者类是一个抽象类或接口,它定义了创建产品对象的各个部分的抽象方法。在实际应用中,通常需要定义多个不同的建造者类来创建不同类型的产品对象

public interface Builder {
    void buildPart1();
    void buildPart2();
    void buildPart3();
    Product getResult();
}
  • 具体建造者(ConcreteBuilder)

        具体建造者类是抽象建造者类的子类,它实现了抽象建造者类中定义的所有抽象方法,并且根据具体需求组装产品对象的各个部分。

public class ConcreteBuilder implements Builder {
    private Product product = new Product();

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

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

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

    @Override
    public Product getResult() {
        return product;
    }
}
  • 指导者(Director)

        指导者类负责创建具体建造者类的实例,并调用具体建造者类中的方法来组装产品对象的各个部分。在实际应用中,通常只需要一个指导者类即可。

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

4、实现方法

在实际使用建造者模式时,通常需要按照以下步骤进行操作:

  • 1.定义产品类

首先,需要定义一个具有多个属性或组件的复杂对象,即产品类。

  • 2.定义抽象建造者类

接着,需要定义一个抽象建造者类或接口,其中包含了创建产品对象各个部分的抽象方法。

  • 3.定义具体建造者类

        然后,需要定义一个或多个具体建造者类,它们是抽象建造者类的子类,实现了抽象建造者类中定义的抽象方法,并且根据具体需求组装产品对象的各个部分。

  • 4.定义指导者类

        最后,需要定义一个指导者类,它负责创建具体建造者类的实例,并调用具体建造者类中的方法来组装产品对象的各个部分。在实际应用中,通常只需要一个指导者类即可。

  • 5.使用建造者模式创建对象

        最后,我们可以使用建造者模式来创建对象,即先创建一个具体建造者类的实例,然后将该实例交给指导者类进行组装,最终得到一个完整的产品对象。

Builder builder = new ConcreteBuilder();
Director director = new Director();
director.construct(builder);
Product product = builder.getResult();

5、使用场景

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

  • 1.对象的构建过程比较复杂

当需要创建的对象较为复杂,需要通过多个步骤来生成时,可以使用建造者模式。

  • 2.需要生成不同表示的对象

当需要按照不同的逻辑顺序来创建对象时,或者需要生成不同表示的对象时,可以使用建造者模式。

  • 3.希望分离对象的构建过程和表示

当希望分离对象的构建过程和具体表示时,可以使用建造者模式。

6、总结

        建造者模式将对象的构建过程分解为多个简单对象的构建过程,并按照一定的顺序进行组装,最终实现对复杂对象的创建。通过使用建造者模式,可以将对象的构建过程和具体的构建实现分离开来,从而提高代码的可维护性和可读性。

end