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

学海无涯苦作舟!!!

相关推荐
E***U94513 分钟前
Kotlin注解处理器
java·开发语言·kotlin
せいしゅん青春之我22 分钟前
【JavaEE进阶】JVM-面试中的高频考点1
java·网络·jvm·笔记·面试·java-ee
老李四22 分钟前
Java 内存分配与回收策略
java·jvm·算法
陈逸轩*^_^*24 分钟前
深入理解 Java JVM,包括垃圾收集器原理、垃圾回收算法原理、类加载机制等
java·jvm
2***574226 分钟前
Java内存泄漏排查工具
java·开发语言
S***H28342 分钟前
Java在微服务网关中的实现
java·开发语言·微服务
cherry有点甜·44 分钟前
标题调用外部接口apifox与浏览器显示不一致
java
家有两宝,感恩遇见1 小时前
不能明文传证件号码后端加密解密最简单的方式AES
java·服务器·开发语言
90后小陈老师1 小时前
用户管理系统 04 实现后端登录功能 | Java新手实战 | 最小架构 | 期末实训 | Java+SpringBoot+Vue3
java·spring boot·架构
❀͜͡傀儡师1 小时前
springboot集成mqtt服务,自主下发
java·spring boot·后端·mqtt·netty