23种设计模式,建造者模式的概念优缺点以及JAVA代码举例

简介: 【4月更文挑战第10天】建造者模式是一种对象创建型设计模式,用于创建复杂对象。其核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括一个Director类,用于管理构建过程,和多个Builder类,每个Builder负责构造复杂对象的一部分。

建造者模式是一种对象创建型设计模式,用于创建复杂对象。其核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括一个Director类,用于管理构建过程,和多个Builder类,每个Builder负责构造复杂对象的一部分。

建造者模式的概念

建造者模式主要用于需要生成的对象具有复杂的内部结构,当这些对象的构造过程需要被细分为不同的步骤,或者需要多个部分或子对象协同工作才能生成时非常有用。它允许用户仅通过指定复杂对象的类型和内容就能构建它们,隐藏了内部构造的细节。

建造者模式的优点

  1. 分步骤构造复杂对象:建造者模式允许按步骤构造一个复杂对象,不必一次性指定所有的构建细节。这使得构建方法可以更清晰、更灵活。
  2. 可以很容易地改变产品的内部表示:具体建造者之间相互独立,增加新的具体建造者无需修改现有类的代码,很好地遵循了开闭原则。
  3. 封装性好:用户不需要知道对象的内部构建细节,建造者会负责处理对象的构建过程。

建造者模式的缺点

  1. 会产生多余的Builder对象以及Director对象:可能会导致系统的复杂性增加。
  2. 产品之间的差异性必须足够大:如果产品之间的差异性不大,则不一定需要使用建造者模式。

Java代码示例

假设我们要创建一个Computer对象,它有CPURAMstorage等属性。我们可以使用建造者模式来逐步构建这个复杂对象。

首先定义Computer类和ComputerBuilder接口:

java复制代码

public class Computer {
    private String CPU;
    private String RAM;
    private String storage;

    // Computer的构造方法设置为private,通过Builder来构建
    private Computer(String CPU, String RAM, String storage) {
        this.CPU = CPU;
        this.RAM = RAM;
        this.storage = storage;
    }

    // Getter方法省略...

    public static class Builder {
        private String CPU;
        private String RAM;
        private String storage;

        public Builder setCPU(String CPU) {
            this.CPU = CPU;
            return this;
        }

        public Builder setRAM(String RAM) {
            this.RAM = RAM;
            return this;
        }

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

        public Computer build() {
            return new Computer(CPU, RAM, storage);
        }
    }
}

使用建造者模式构建对象:

java复制代码

public class BuilderPatternDemo {
    public static void main(String[] args) {
        Computer computer = new Computer.Builder()
                .setCPU("Intel Core i7")
                .setRAM("16GB")
                .setStorage("1TB SSD")
                .build();

        System.out.println(computer); // 此处应有Computer类的toString方法输出计算机配置
    }
}

在这个例子中,Computer的构造函数被设为私有,这意味着它不能直接被外部类实例化。相反,Computer的构建过程被封装在其静态内部类Builder中。客户端代码通过链式调用Builder类的方法来逐步设置Computer对象的状态,最后通过调用build方法来获取最终构建的对象。这种方式使得客户端代码在构建复杂对象时更加清晰、灵活。

相关文章
|
8天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
22天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
35 5
Java反射机制:解锁代码的无限可能
|
18天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
52 3
|
24天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
67 10
|
19天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
18天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
20天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
32 1
|
26天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
30 6
|
10天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
设计模式 缓存 Java
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)