Java设计模式之建造者模式

2024-01-20 22:47:38 浏览数 (1)

建造者模式(Builder Pattern)

建造者模式是一种创建型设计模式,用于构建复杂对象。该模式的主要目标是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

通常情况下,一个对象的构建过程涉及多个步骤,而且这些步骤的实现可能因需求的不同而变化。建造者模式通过将构建过程拆分成多个步骤,并提供一个指导者(Director)来协调这些步骤的顺序,从而实现了构建过程的灵活性和可复用性。

建造者模式的主要参与者包括:

  1. 产品(Product): 被构建的复杂对象。建造者模式的目标是创建这个对象。
  2. 抽象建造者(Builder): 声明了构建产品的抽象接口,包括定义了构建产品各个部分的抽象方法。
  3. 具体建造者(ConcreteBuilder): 实现了抽象建造者接口,负责实际构建产品的各个部分,并提供一个用于获取最终产品的方法。
  4. 指导者(Director): 负责协调具体建造者的构建过程,按照一定的步骤和顺序来构建产品。
  5. 客户端(Client): 使用建造者模式来构建复杂对象的客户端代码。

案例说明

以生产电脑为例来演示建造者模式的实现。在下面例子中,我们将电脑抽象为一个复杂对象,它包含了处理器、内存、存储等组件。

首先,定义产品(Computer):

代码语言:java复制
public class Computer {
    private String processor;
    private String memory;
    private String storage;
    public void setProcessor(String processor) {
        this.processor = processor;
    }
    public void setMemory(String memory) {
        this.memory = memory;
    }
    public void setStorage(String storage) {
        this.storage = storage;
    }
    @Override
    public String toString() {
        return "Computer{"  
        "processor='"   processor   '''  
        ", memory='"   memory   '''  
        ", storage='"   storage   '''  
        '}';
    }
}

接下来,定义抽象建造者接口(ComputerBuilder):

代码语言:java复制
public interface ComputerBuilder {

    void buildProcessor();

    void buildMemory();

    void buildStorage();

    Computer getResult();

}

然后,创建具体建造者实现类(DesktopComputerBuilder、LaptopComputerBuilder):

代码语言:java复制
public class DesktopComputerBuilder implements ComputerBuilder {
    private Computer computer = new Computer();
    @Override
    public void buildProcessor() {
        computer.setProcessor("Desktop Processor");
    }
    @Override
    public void buildMemory() {
        computer.setMemory("Desktop Memory");
    }
    @Override
    public void buildStorage() {
        computer.setStorage("Desktop Storage");
    }
    @Override
    public Computer getResult() {
        return computer;
    }
}
代码语言:java复制
public class LaptopComputerBuilder implements ComputerBuilder {
    private Computer computer = new Computer();
    @Override
    public void buildProcessor() {
        computer.setProcessor("Laptop Processor");
    }
    @Override
    public void buildMemory() {
        computer.setMemory("Laptop Memory");
    }
    @Override
    public void buildStorage() {
        computer.setStorage("Laptop Storage");
    }
    @Override
    public Computer getResult() {
        return computer;
    }
}

最后,定义指导者(ComputerDirector):

代码语言:java复制
public class ComputerDirector {
    private ComputerBuilder computerBuilder;
    public ComputerDirector(ComputerBuilder computerBuilder) {
        this.computerBuilder = computerBuilder;
    }
    public void constructComputer() {
        computerBuilder.buildProcessor();
        computerBuilder.buildMemory();
        computerBuilder.buildStorage();
    }
    public Computer getComputer() {
        return computerBuilder.getResult();
    }
}

现在,客户端可以使用建造者模式来构建不同类型的电脑:

代码语言:java复制
public class Client {
    public static void main(String[] args) {
        ComputerBuilder desktopBuilder = new DesktopComputerBuilder();
        ComputerBuilder laptopBuilder = new LaptopComputerBuilder();
        ComputerDirector director1 = new ComputerDirector(desktopBuilder);
        director1.constructComputer();
        Computer desktop = director1.getComputer();
        System.out.println("Desktop Computer: "   desktop);

        ComputerDirector director2 = new ComputerDirector(laptopBuilder);
        director2.constructComputer();
        Computer laptop = director2.getComputer();
        System.out.println("Laptop Computer: "   laptop);
    }
}

这个例子中,通过建造者模式,我们可以根据需要构建不同类型的电脑,而且构建的过程可以在不同的指导者下灵活变化。

案例说明

在上面的案例中,我们通过建造者模式构建了两种不同类型的电脑:Desktop Computer和Laptop Computer。下面详细说明了构建过程:

  1. 定义产品(Computer):Computer 类包含了电脑的属性,如处理器(processor)、内存(memory)和存储(storage)。
  2. 定义抽象建造者接口(ComputerBuilder):ComputerBuilder 接口定义了构建电脑的抽象方法,包括构建处理器、内存和存储的方法,以及获取最终产品的方法。
  3. 创建具体建造者实现类:DesktopComputerBuilderLaptopComputerBuilder 类实现了 ComputerBuilder 接口,负责实际构建不同类型电脑的各个部分。在具体建造者的 buildProcessorbuildMemorybuildStorage 方法中,设置了相应类型电脑的处理器、内存和存储属性。
  4. 定义指导者(ComputerDirector):ComputerDirector 类负责协调具体建造者的构建过程,按照一定的步骤和顺序来构建电脑。constructComputer 方法调用了建造者的构建方法,设置了处理器、内存和存储等属性。getComputer 方法用于获取构建完成的电脑产品。
  5. 客户端使用建造者模式构建不同类型的电脑:在客户端中,首先创建了两个具体建造者实例,分别是 DesktopComputerBuilderLaptopComputerBuilder。然后,通过 ComputerDirector 来构建不同类型的电脑:director1 构建了台式电脑,它的构建过程包括设置台式电脑的处理器、内存和存储。director2 构建了笔记本电脑,它的构建过程包括设置笔记本电脑的处理器、内存和存储。最后,通过 director1.getComputer()director2.getComputer() 获取构建完成的台式电脑和笔记本电脑。

总的来说,通过建造者模式,我们能够通过不同的具体建造者实现类来构建不同类型的电脑,而且在构建过程中,可以通过指导者来控制构建的步骤和顺序,实现了构建过程的灵活性和可复用性。这种模式使得客户端代码与具体产品的构建过程解耦,使得系统更易维护和扩展。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞