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方法来获取最终构建的对象。这种方式使得客户端代码在构建复杂对象时更加清晰、灵活。

相关文章
|
2天前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
1天前
|
Java Kotlin
java调用kotlin代码编译报错“找不到符号”的问题
java调用kotlin代码编译报错“找不到符号”的问题
16 10
|
2天前
|
设计模式 安全 Java
【设计模式】字节三面:请举例阐释访问者模式
【设计模式】字节三面:请举例阐释访问者模式
8 2
|
2天前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
12 1
|
2天前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
6 0
|
2天前
|
Java
Java的取余如何编写代码
【5月更文挑战第9天】Java的取余如何编写代码
19 5
|
2天前
|
设计模式 Java
【JAVA基础篇教学】第十四篇:Java中设计模式
【JAVA基础篇教学】第十四篇:Java中设计模式
|
2天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
2天前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
2天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
10 0