前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式之建造者模式

Java设计模式之建造者模式

原创
作者头像
刺槐儿
修改2024-01-20 22:47:38
2580
修改2024-01-20 22:47:38
举报
文章被收录于专栏:Java设计模式

建造者模式(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腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建造者模式(Builder Pattern)
  • 案例说明
  • 案例说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档