Java建造者模式(Builder Pattern)

简介: Java建造者模式(Builder Pattern)

Java建造者模式(Builder Pattern):

建造者模式(Builder Pattern)是一种创建型设计模式,用于构建复杂对象。它将对象的构建过程拆分为多个步骤,并提供一个指挥者(Director)来按照特定的顺序和规则执行这些步骤,最终构建出一个完整的对象。

作用:

  • 将对象的构建过程与其表示分离,使得构建过程可以独立于具体的对象结构。
  • 简化对象的构建过程,使得客户端在构建对象时可以灵活地配置和定制。

优势:

  • 提供灵活的构建过程:通过将构建过程分解为多个步骤,并由指挥者来控制步骤的顺序和执行,可以提供灵活的构建方式,允许客户端根据需求选择性地执行或跳过某些步骤。
  • 隔离复杂性:对于复杂对象的构建过程,将其分解为多个步骤可以降低构建过程的复杂性,并且可以集中处理每个步骤的逻辑和细节。
  • 支持变化和扩展:通过增加不同的具体建造者,可以根据需要构建不同的对象表示,而无需修改已有的代码。

适用场景:

  • 当对象的构建过程较为复杂,需要进行多个步骤,且每个步骤可以根据需求进行灵活配置时,可以考虑使用建造者模式。
  • 当需要构建的对象有多个变体,且构建过程相似但细节不同时,可以使用建造者模式来封装不同的构建逻辑。
  • 当需要在构建过程中进行逐步验证和检查,以确保最终构建出的对象符合特定的规则和约束时,建造者模式也是一个合适的选择。

需要注意的是,建造者模式适用于创建复杂对象,而对于简单对象,可能会引入额外的复杂性。此外,建造者模式常与其他设计模式如工厂模式、抽象工厂模式等结合使用,以提供更强大的灵活性和扩展性。

代码举例说明

以下是一个使用建造者模式的Java代码示例:

// 产品类
class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void show() {
        System.out.println("Product Parts:");
        System.out.println("Part A: " + partA);
        System.out.println("Part B: " + partB);
        System.out.println("Part C: " + partC);
    }
}

// 抽象建造者
interface Builder {
    void buildPartA();
    void buildPartB();
    void buildPartC();
    Product getResult();
}

// 具体建造者
class ConcreteBuilder implements Builder {
    private Product product;

    public ConcreteBuilder() {
        this.product = new Product();
    }

    @Override
    public void buildPartA() {
        product.setPartA("Part A");
    }

    @Override
    public void buildPartB() {
        product.setPartB("Part B");
    }

    @Override
    public void buildPartC() {
        product.setPartC("Part C");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

// 指挥者
class Director {
    private Builder builder;

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}

// 客户端使用
public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director();
        director.setBuilder(builder);

        Product product = director.construct();
        product.show();
    }
}

在上述示例中,我们有一个产品类 Product,它包含了多个部分(Part A、Part B、Part C)。接下来,我们定义了抽象建造者接口 Builder,它规定了构建产品的各个部分的方法。具体建造者 ConcreteBuilder 实现了这个接口,并实现了具体的构建过程。最后,我们有一个指挥者 Director,它负责指导具体的建造者按照特定的顺序和规则进行构建,并返回最终构建的产品。

在客户端代码中,我们创建了一个具体的建造者 ConcreteBuilder 和一个指挥者 Director,将建造者设置给指挥者,并调用指挥者的 construct 方法来构建产品。最后,我们可以通过 getResult 方法获取构建完成的产品,并展示产品的各个部分。

通过使用建造者模式,我们可以将复杂对象的构建过程与其表示分离,使得客户端在构建对象时更加灵活,并且可以通过定义不同的具体建造者来构建不同的对象表示,而无需修改客户端代码。

相关文章
|
5月前
|
设计模式 安全 Java
构建未来应用:Java设计模式 - 建造者模式(Builder)在现代编程中的应用
【4月更文挑战第7天】建造者模式是提升代码质量的关键,尤其在复杂环境中。它分步骤构建对象,将构建与表示分离,适用于UI构建、数据模型组装、配置文件解析和网络请求构造等场景。最佳实践包括明确构建步骤、提供默认值、支持链式调用和确保线程安全。然而,过多步骤、不一致状态和性能问题是使用时需注意的问题。掌握建造者模式对于现代编程至关重要。
82 3
|
1月前
|
设计模式 算法 Java
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
|
5月前
|
设计模式 算法 Java
【设计模式】JAVA Design Patterns——Builder(构造器模式)
【设计模式】JAVA Design Patterns——Builder(构造器模式)
|
2月前
|
存储 JSON 前端开发
【Java】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天
在实际项目中,使用 `@JsonFormat(pattern = "yyyy-MM-dd")` 注解导致出生日期少了一天的问题,根源在于夏令时的影响。本文详细解析了夏令时的概念、`@JsonFormat` 注解的使用方法,并提供了三种解决方案:在注解中添加 `timezone = GMT+8`、修改 JVM 参数 `-Duser.timezone=GMT+08`,以及使用 `timezone = Asia/Shanghai
166 0
【Java】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天
|
2月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
3月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
48 0
|
4月前
|
设计模式 Java
Java设计模式:建造者模式之经典与流式的三种实现(四)
Java设计模式:建造者模式之经典与流式的三种实现(四)
|
4月前
|
设计模式 Java
Java设计模式之建造者模式详解
Java设计模式之建造者模式详解
|
5月前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
5月前
|
设计模式 JavaScript 前端开发
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式