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方法,进而实现了链路设置的方式。

学海无涯苦作舟!!!

相关推荐
daqinzl3 分钟前
java获取机器ip、mac
java·mac·ip
激流丶19 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue22 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式39 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田2 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue
神里大人2 小时前
idea、pycharm等软件的文件名红色怎么变绿色
java·pycharm·intellij-idea