Java设计模式 _创建型模式_建造者模式(Builder)

一、建造者模式

1、建造者模式(Builder Pattern)是一种创建对象的设计模式。它允许你使用不同的构建策略来创建复杂对象。通常是在复杂类中通过静态内部类(Builder)来进行构建。

2、实现思路:

(1)、创建实体类中,私有化构造方法

(2)、定义静态内部类Builder,Builder类包含和实体类相同的属性,以及每个属性的set方法,以及build()方法去调用实体的构造。

(3)、构建实例对象时,通过静态内部类Builder进行设值在build()进行实例对象的创建。

3、优点

(1)、相对于构造方法的方式,建造者模式无需关心构造方法的参数顺序。

(2)、相对于构造方法的方式,建造者模式套路更优,无需定义更多的构造方法。

(3)、创建实例的方式隐藏在内部,不会暴漏给外部,外部无法知道创建的具体过程。

(4)、创建对象的过程是链路进行设置的,相对而言,代码更灵活和可读性更好。

(5)、相对于new对象,在逐个set赋值的方式。建造者模式是先set,在new的过程。建造者可以确定对象一定存在,而前者可能存在构建失败造成空指针的问题等。

二、代码示例

代码示例:

java 复制代码
public class Computer {
    private String cpu;
    private String gpu;
    private String ram;
    private String storage;

    private Computer(Builder builder) {
        this.cpu = builder.cpu;
        this.gpu = builder.gpu;
        this.ram = builder.ram;
        this.storage = builder.storage;
    }

    @Override
    public String toString() {
        return "Computer{" + "cpu='" + cpu + '\'' + ", gpu='" + gpu + '\'' + ", ram='" + ram + '\'' +  ", storage='" + storage + '\'' +  '}';
    }

    public static class Builder {
        private String cpu;
        private String gpu;
        private String ram;
        private String storage;

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

        public Builder setGpu(String gpu) {
            this.gpu = gpu;
            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(this);
        }
    }

    public static void main(String[] args) {
        Computer computer = new Computer.Builder()
                .setCpu("CPU-i7")
                .setGpu("GPU-3080")
                .setRam("16GB")
                .setStorage("1TB")
                .build();
        System.out.println(computer);

        computer = new Computer.Builder()
                .setCpu("CPU-i11")
                .setGpu("GPU-9090")
                .setRam("32GB")
                .setStorage("2TB")
                .build();
        System.out.println(computer);
    }
}

如上的代码示例中,在静态内部类Builder中,每一个set方法中通过return this,实现了设备值的同时,返回房前Builder对象,可以继续调用set方法,进而实现了链路设置的方式。

学海无涯苦作舟!!!

相关推荐
考虑考虑17 小时前
Jpa使用union all
java·spring boot·后端
用户37215742613518 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊19 小时前
Java学习第22天 - 云原生与容器化
java
渣哥21 小时前
原来 Java 里线程安全集合有这么多种
java
间彧21 小时前
Spring Boot集成Spring Security完整指南
java
间彧21 小时前
Spring Secutiy基本原理及工作流程
java
数据智能老司机1 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解1 天前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机1 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
洛小豆1 天前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试