工作之建造者模式

news2024/11/23 18:30:07

刚刚开通了一个公众号,会分享一些技术博客和自己觉得比较好的项目,同时会更新一些自己使用的工具和图书资料,后面会整理一些面试资料进行分享,觉得有兴趣的可以关注一下。
在这里插入图片描述

项目场景:

工作中最近对接的第三方系统的API,请求体是JSON格式的,嵌套的层级真有够深的。但是变化的值就那几个,为了最深层的几个值得变化,得一层一层得构造值,太麻烦了。这个时候得建造者模式真堪大用!!


解决方案:

如下代码,其实嵌套了多层之后,变化得只有最深层得value,所以可以直接新建一个Builder,只要传最里面得属性值,直接帮你组建好整个流程。见Builder部分。


@Data
public class AllRequest {


    private Request request = new Request();


    @Data
    private static class Request{
        private Property1 property1;

        private Property2 property2;
    }

    @Data
    private static class Property1 {

        private List<ChildProperty> children;

    }
    @Data
    private static class Property2{
        private List<ChildProperty> children;

    }

    @Data
    @AllArgsConstructor
    private static class ChildProperty{
        private String key;

        private String value;

    }

    public static AllRequestBuilder builder() {
        return new AllRequestBuilder();
    }

    public static class AllRequestBuilder {
        private AllRequest allRequest = new AllRequest();
        private AllRequestBuilder(){}

        public AllRequestBuilder property1(@NonNull String ...values) {
            Property1 property1 = allRequest.getRequest().getProperty1();

            if (Objects.isNull(property1)) {
                property1 = new Property1();
                allRequest.getRequest().setProperty1(property1);
            }
            List<ChildProperty> children = property1.getChildren();

            if (CollectionUtils.isEmpty(children)) {
                children = new ArrayList<>();
                property1.setChildren(children);
            }

            for (String value : values) {
                children.add(new ChildProperty(key, value));
            }

            return this;
        }

        public MDPRequestBuilder property2(@NonNull String ...values) {
            Property2 property2 = allRequest.getRequest().getProperty2();

            if (Objects.isNull(property1)) {
                property2 = new Property2();
                allRequest.getRequest().setProperty2(property2);
            }
            List<ChildProperty> children = property2.getChildren();

            if (CollectionUtils.isEmpty(children)) {
                children = new ArrayList<>();
                property21.setChildren(children);
            }

            for (String value : values) {
                children.add(new ChildProperty(key, value));
            }

            return this;
        }

        public AllRequest build() {
            return allRequest;
        }
    }
}

打完收工!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1862508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数组,链表,红黑树介绍以及性能对比实验

作者&#xff1a;晓宜 &#x1f308;&#x1f308;&#x1f308; 个人简介&#xff1a;携程javaer&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 ❤️❤️❤️ 一起进步&#xff01;&#xff01;&#xff01;&#x1f60a; 前言 以前学了数…

安装zabbix时报错Could not resolve host: mirrors.huaweicloud.com;Unknown error解决办法

目录 1、问题原因 2、解决办法 3、知识拓展 DNS的区别 DNS配置文件解析 域名解析过程 4、书籍推荐 当安装Zabbix server&#xff0c;Web前端&#xff0c;agent时出现&#xff1a; [rootsc-zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent安装过程中会出…

【咨询】企业数字档案馆建设规划建议书-模版范例

导读&#xff1a;本文提供范例可以作为xxx建设规划建议书模版 建议书结构 第一章 项目背景及意义 1.1.企业数字档案馆建设是构建新质生产力的重要抓手 1.2.企业数字档案馆建设是落实全国档案事业发展规划的重要支撑 1.3.企业数字档案馆建设是支撑提质增效、高质量发展的有效…

利用scalene进行性能分析和优化

​ 上一篇文章&#xff0c;我们详细讲解了Py-Spy这个性能分析和优化工具的使用流程&#xff1b;今天&#xff0c;我们将深入探讨另一个性能分析和优化工具——scalene。 什么是scalene&#xff1f; scalene是一个高精度的Python性能分析工具&#xff0c;可以对CPU和内存使用情…

为什么说大数据对电子商务卖家至关重要?||电商API接口

从数据中获取价值的重要性&#xff0c;远甚以往。 由于新冠的爆发&#xff0c;所有B2B公司都被迫将业务转到线上的电子商务平台以加速数字化转型&#xff1b;而随着疫情逐渐褪去&#xff0c;这种线上线下混合的趋势得以进一步加强。 企业希望能够在自己选定的设备上&#xff0c…

视频太大如何压缩上传微信

视频太大如何压缩上传微信&#xff0c;视频已成为人们生活中不可或缺的一部分。然而&#xff0c;视频文件的大小也在不断增加&#xff0c;这给存储和传输带来了极大的挑战。下面给大家分享一个视频太大不能发微信的解决方法。 打开 “51视频处理官网 的网站。上传视频。 ​视频…

CentOS9镜像下载地址加速下载

CentOS 9 是 CentOS 项目的最新版本之一&#xff0c;它基于 RHEL&#xff08;Red Hat Enterprise Linux&#xff09;9 的源代码构建。CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个免费的企业级 Linux 发行版&#xff0c;旨在提供一个与 RHEL 兼…

花样玩转“所见即所得”的可视化开发UI

随着技术的发展&#xff0c;用户对软件的界面美观度和交互体验的要求越来越高。在这样的背景下&#xff0c;可视化开发UI&#xff08;User Interface&#xff09;成为了提升用户体验和开发效率的重要工具。 通过图形界面来设计和构建用户界面的方法&#xff0c;可视化开发UI可…

ROS CDK魔法书:点亮博客上云新技能(TypeScript篇)

引言 在数字世界的浩瀚海洋中&#xff0c;信息与数据如同戏剧中的主角&#xff0c;舞动着无形的旋律&#xff0c;构建起信息时代的交响乐。而在这其中&#xff0c;作为一位技术领域的探索者&#xff0c;你的使命便是挥舞着编码的魔杖&#xff0c;创造和守护着这些宝贵的数字灵…

吉时利 Keithley2440 数字源表

Keithley2440吉时利SMU数字源表 Keithley2440 - 40V、5A、50W源表 吉时利数字源表系列专用于要求紧密结合源和测量 的测试应用。全部数字源表型号都提供精密电压源和电 流源以及测量功能。每款数字源表既是高度稳定的直流 电源也是真仪器级的6位半万用表。此电源的特性包括 低…

Android副屏多屏异显原来如此简单

省流介绍 安卓副屏开发&#xff0c;直接继承dialog&#xff0c;会写dialog&#xff0c;直接指定屏幕显示完事&#xff0c;模拟器和手机开发者里面支持单屏幕调试 详细看文章尾部 public class Presentation extends Dialog class Screen2 : Presentation {constructor(outer…

go语言day06 数组 切片

数组 : 定长且元素类型一致,在索引逻辑上连续存储,数组的内存地址是存储的第一个元素的内存地址 几种创建方式: 仅声明 var nums [ 3 ] int 声明并赋值 var nums [ 2 ] string {"武沛齐","alex"} 声明并按下标赋值 var nums [ 3 ] int {0:88,2:1 } 省略…

机器人控制系列教程之运动规划(2)

简介 在笛卡尔坐标空间中轨迹规划时&#xff0c;首先用位置矢量和旋转矩阵表示所有相应的机器人节点&#xff0c;其次在所有路径段插值计算相对的位置矢量和旋转矩阵&#xff0c;依次得出笛卡尔坐标空间中的轨迹序列通过求解运动学逆问题得到相应关节位置参数。 优点&#xf…

绘制图形

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在前3节的实例中&#xff0c;我们一直绘制的都是直线&#xff0c;实际上&#xff0c;海龟绘图还可以绘制其他形状的图形&#xff0c;如圆形、多边形等…

通过frp实现内外网映射

frp介绍和使用方法可以参考官网:安装 | frp 1、准备两台服务器&#xff0c;一台内网服务器A&#xff0c;一台有公网ip的外网服务器B(47.12.13.15) 2、去官方仓库下载frp安装包&#xff1a;Releases fatedier/frp GitHub 下载包根据自己服务系统选择 ​ 3、先在外网服务器…

类的默认成员函数——拷贝构造函数

1.概念引入 在现实生活中&#xff0c;如果有两个兄弟长得一模一样&#xff0c;我们就称其为双胞胎 当我们创建了一个新的对象&#xff0c;需要用同类型的对象拷贝并初始化&#xff0c;就要用到拷贝构造函数 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类…

2024 年 8 款最佳建筑 3D 渲染软件

你现在使用的3D 渲染软件真得适合你吗&#xff1f; 在建筑和室内渲染当中&#xff0c;市面上有许多3D渲染软件可供选择。然而&#xff0c;并不是每款软件都适合你的需求。本指南将重点介绍2024年精选的8款最佳建筑3D渲染软件&#xff0c;帮助你了解不同的选项&#xff0c;并选…

STM32的SPI通信

1 SPI协议简介 SPI&#xff08;Serial Peripheral Interface&#xff09;协议是由摩托罗拉公司提出的通信协议&#xff0c;即串行外围设备接口&#xff0c;是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间&#xff0c;使用于对通信速率要求较高的场合。 …

基于Java的宠物领养管理系统【附源码】

摘 要 近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;宠物管理系统利用计算机网络实现信息化管理&#xff0c;使整个宠物领养的发展和服务水平有显著提升。 本文拟采用IDEA开发工具…

Live Wallpaper Themes 4K Pro for Mac v19.9 超高清4K动态壁纸

Live Wallpaper & Themes 4K Pro for Mac v19.7 是一款专为Mac用户设计的超高清4K动态壁纸应用程序。它凭借出色的视觉效果和丰富的个性化设置&#xff0c;为用户带来全新的桌面体验。 这款软件提供了大量精美的动态壁纸供用户选择&#xff0c;涵盖了各种风格和主题&#…