创建型模式-建造者模式

本文详细介绍了建造者模式的概念、特点、工作流程及其优点,通过电脑配置构建示例展示了如何在IT中使用此模式创建不同配置的对象,提高灵活性和代码复用性。
摘要由CSDN通过智能技术生成

创建型模式-建造者模式

建造者模式是一种创建型设计模式,它通过将对象的构建过程拆分为多个步骤,并允许按照特定顺序逐步构建复杂对象。建造者模式的核心思想是将对象的构建与表示分离,以便相同的构建过程可以创建不同的表示。


建造者模式的主要特点

  1. 产品类(Product):

    表示要构建的复杂对象。产品类通常具有多个属性,需要通过建造者来逐步构建。

  2. 建造者接口(Builder):

    定义了构建复杂对象的方法。建造者接口通常包含设置产品属性的方法,以及构建产品的方法。

  3. 具体建造者(Concrete Builder):

    实现了建造者接口,负责实际构建复杂对象。具体建造者类中通常包含一个产品对象,通过调用设置属性的方法来构建产品。

  4. 指挥者(Director):

    负责使用建造者对象构建复杂对象。指挥者类通常包含一个建造者对象,通过调用建造者的方法来构建产品。


建造者模式的工作流程

  1. 客户端创建指挥者对象,并传入具体的建造者对象。
  2. 指挥者通过调用建造者对象的方法,按照一定的顺序来构建复杂对象。
  3. 建造者对象根据指挥者的调用,逐步设置产品的属性,并最终构建出复杂对象。
  4. 客户端通过指挥者获取构建完成的产品对象。

建造者模式的优点

  • 分离构建过程和表示,使得同样的构建过程可以创建不同的表示。
  • 可以更加精细地控制产品的构建过程,灵活性高。
  • 隐藏产品的构建细节,使得客户端不需要知道具体的构建过程。
  • 客户端创建指挥者对象和具体建造者对象。
  • 指挥者根据具体建造者的实现调用其方法来构建产品。

建造者模式适用场景

  • 当创建复杂对象的构建过程较为复杂,需要进行多个步骤的操作时,可以使用建造者模式。
  • 当创建的对象具有多个属性,且不同的属性可以灵活组合时,可以使用建造者模式。
  • 当希望创建不同表示的对象,但是构建过程相同或相似时,可以使用建造者模式。

需要注意的是,建造者模式适用于创建复杂对象的场景,特别是当对象的构建过程比较复杂或涉及多个步骤时。如果对象的构建过程比较简单,可以考虑使用工厂模式。

建造者模式示例

建造者模式示例,以创建一份电脑对象为例

// 产品类
class Computer {
    private String cpu;
    private String memory;
    private String storage;

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public void setStorage(String storage) {
        this.storage = storage;
    }

    public String getDetails() {
        return "Computer - CPU: " + cpu + ", Memory: " + memory + ", Storage: " + storage;
    }
}

// 抽象建造者
interface ComputerBuilder {
    void setCPU();
    void setMemory();
    void setStorage();
    Computer getComputer();
}

// 具体建造者
class BasicComputerBuilder implements ComputerBuilder {
    private Computer computer;

    public BasicComputerBuilder() {
        computer = new Computer();
    }

    public void setCPU() {
        computer.setCpu("Intel Core i3");
    }

    public void setMemory() {
        computer.setMemory("4GB");
    }

    public void setStorage() {
        computer.setStorage("500GB HDD");
    }

    public Computer getComputer() {
        return computer;
    }
}

class HighEndComputerBuilder implements ComputerBuilder {
    private Computer computer;

    public HighEndComputerBuilder() {
        computer = new Computer();
    }

    public void setCPU() {
        computer.setCpu("Intel Core i7");
    }

    public void setMemory() {
        computer.setMemory("16GB");
    }

    public void setStorage() {
        computer.setStorage("1TB SSD");
    }

    public Computer getComputer() {
        return computer;
    }
}

// 指挥者
class Director {
    public void constructBasicComputer(ComputerBuilder builder) {
        builder.setCPU();
        builder.setMemory();
        builder.setStorage();
    }

    public void constructHighEndComputer(ComputerBuilder builder) {
        builder.setCPU();
        builder.setMemory();
        builder.setStorage();
    }
}

// 客户端
public class Main {
    public static void main(String[] args) {
        Director director = new Director();

        // 构建基础配置的电脑
        ComputerBuilder basicBuilder = new BasicComputerBuilder();
        director.constructBasicComputer(basicBuilder);
        Computer basicComputer = basicBuilder.getComputer();
        System.out.println(basicComputer.getDetails());

        // 构建高端配置的电脑
        ComputerBuilder highEndBuilder = new HighEndComputerBuilder();
        director.constructHighEndComputer(highEndBuilder);
        Computer highEndComputer = highEndBuilder.getComputer();
        System.out.println(highEndComputer.getDetails());
    }
}

在上述示例中,我们使用建造者模式来构建不同配置的电脑对象。

Computer 类是产品类,包含了电脑的属性和方法。

ComputerBuilder 是抽象建造者接口,定义了设置电脑各部件的抽象方法和返回最终电脑对象的方法。

BasicComputerBuilderHighEndComputerBuilder 是具体建造者类,实现了抽象建造者接口,负责实际构建电脑对象的过程。Director 是指挥者类,负责调用具体建造者的方法来构建电脑对象。客户端通过指挥者调用具体建造者的方法来构建不同配置的电脑对象。

在客户端 Main 类中,我们创建了指挥者对象和具体建造者对象,并通过指挥者调用具体建造者的方法来构建不同配置的电脑对象。然后,我们可以使用电脑对象的方法来获取电脑的详细信息。


通过建造者模式,我们可以使用相同的构建过程来创建不同配置的电脑对象,而无需直接实例化具体的产品类,使得构建过程更加灵活和可复用。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinyi_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值