创建型模式-建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。

核心思想

将复杂对象的创建步骤分解开来,通过一步步的构建来完成对象的创建,隐藏构建的具体细节,从而使构造过程更加灵活。

组成

  • Builder(抽象建造者)

    定义用于创建产品各部分的接口。

  • ConcreteBuilder(具体建造者)

    实现抽象建造者接口,完成产品的具体部分构造。

  • Product(产品类)

    表示复杂对象,包含多个组成部分。

  • Director(指挥者)

    调用建造者中的方法按特定顺序来构建产品。

优缺点

  • 优点
    分离复杂构建过程与表示:提高代码的清晰性和可维护性。
    易于扩展:可以通过添加新的具体建造者来扩展创建流程。
    细节控制:通过指挥者可以按特定步骤控制产品的创建顺序。
  • 缺点
    生成器类的数量可能会增加,增加代码复杂度。
    不适用于构造过程过于简单的场景。
    代码实现示例
    假设要创建一辆汽车,每辆车由车轮、发动机、车身等部分组成。
java 复制代码
// 产品类
public class Car {
    private String engine;
    private String wheels;
    private String body;

    // Getter 和 Setter
    public void setEngine(String engine) {
        this.engine = engine;
    }

    public void setWheels(String wheels) {
        this.wheels = wheels;
    }

    public void setBody(String body) {
        this.body = body;
    }

    @Override
    public String toString() {
        return "Car [engine=" + engine + ", wheels=" + wheels + ", body=" + body + "]";
    }
}
// 抽象建造者
public interface CarBuilder {
    void buildEngine();
    void buildWheels();
    void buildBody();
    Car getCar(); // 返回建造好的产品
}
// 具体建造者
public class SportsCarBuilder implements CarBuilder {
    private Car car;

    public SportsCarBuilder() {
        this.car = new Car();
    }

    @Override
    public void buildEngine() {
        car.setEngine("V8 Engine");
    }

    @Override
    public void buildWheels() {
        car.setWheels("Sports Wheels");
    }

    @Override
    public void buildBody() {
        car.setBody("Sleek Sports Body");
    }

    @Override
    public Car getCar() {
        return car;
    }
}
// 指挥者
public class Director {
    private CarBuilder builder;

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

    public Car constructCar() {
        builder.buildEngine();
        builder.buildWheels();
        builder.buildBody();
        return builder.getCar();
    }
}
//客户端测试
public class Main {
    public static void main(String[] args) {
        // 创建具体建造者
        CarBuilder sportsCarBuilder = new SportsCarBuilder();

        // 指挥者控制构建过程
        Director director = new Director(sportsCarBuilder);

        // 构建产品
        Car sportsCar = director.constructCar();

        // 输出结果
        System.out.println(sportsCar);
    }
}

建造者模式适用场景

  • 复杂对象的创建:当一个对象的创建涉及多个部分且需要特定顺序时。
  • 多种构造方式:需要为同一产品创建不同的表示。
  • 隔离创建细节:需要隐藏产品的构建细节时。
  • 如果你需要进一步探索建造者模式的高级用法或其他设计模式,随时告诉我!
相关推荐
平凡但不平庸的码农3 小时前
Go Slice 详解
算法·golang
想学习java初学者4 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦4 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
weixin_449173654 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
砚底藏山河5 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
MegaDataFlowers6 小时前
运行若依项目
java
lulu12165440786 小时前
JetBrains IDE 终极AI编程方案:CC GUI插件让Claude Code和Codex丝滑运行
java·ide·人工智能·python·ai编程
Jasmine_llq6 小时前
《B3867 [GESP202309 三级] 小杨的储蓄》
算法·循环遍历·数组累加(模拟)·索引定位·顺序输出
啦啦啦_99996 小时前
案例之 逻辑回归_电信用户流失预测
算法·机器学习·逻辑回归
('-')7 小时前
八股复习2:Java Array list和Linked list
java·开发语言