基础-Java构建器/Builder模式入门解析

Builder模式与注解实现优雅的命令模式 命令模式是面向对象设计中的经典行为模式,通过将请求封装为对象来实现请求发送者与接收者的解耦。其核心原理是将方法调用抽象化,支持命令的排队、记录、撤销等扩展能力。结合Builder模式可以优雅解决复杂命令对象的构造问题,避免构造器参数爆炸。注解机制则能进一步规范命令的元数据定义和参数校验,提升代码可读性。在电商订单状态管理、金融交易流程等需要高扩展性的业务场景中,这种组合方案能显著降低代码复杂度。通过Lombok简化Builder实现、利用注解处理器自动生成代码等工程实践,开发者可以快速构建健壮的命令体系。 阅读详情

1、什么情况下考虑使用构造器

  • 遇到多个构造器参数需要设置的时候/可能一次只需要设置其中特定的几项;
  • 这时候使用重叠构造器模式,第一个构造器含一个参数,第二个两个,以此类推。会涉及到用不到的参数,造成失控;
  • 这时候出现了JavaBeans模式,使用一个无参的构造器创建对象,之后使用setter方法设置每个必要的参数(setXxxxx)。缺点是调试困难,线程不安全。

2、Builder模式介绍

  • 1、不直接生成想要的对象,而是让客户端利用必要的参数调用构造器,以此得到一个builde对象;
  • 2、客户端在builder对象上利用类setter的方法,设置相关参数;
  • 3、最后,客户端调用无参的build对象生成不可变的对象。

3、示例代码

package test;

public class NutritionFacts {
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;

    public static class Builder{//静态内部类
        private final int servingSize;
        private final int servings;

        private  int calories = 0;//没有final
        private  int fat = 0;
        private  int sodium = 0;
        private  int carbohydrate = 0;

        public Builder(int servingSize,int servings){//有参构造器
            this.servingSize = servingSize;
            this.servings = servings;
        }

        //setter
        public Builder calories(int val){
            calories = val;
            return this;
        }
        public Builder fat(int val){
            fat = val;
            return this;
        }
        public Builder sodium (int val){
            sodium  = val;
            return this;
        }
        public Builder carbohydrate(int val){
            carbohydrate = val;
            return this;
        }

        public NutritionFacts build(){
            return new NutritionFacts(this);
        }
    }

    private NutritionFacts(Builder builder){
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
}

//测试 客户端代码 这里就直接在此类写了
    public static void main(String[] args){
        NutritionFacts cacaCola = new Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();
    }
}

4、Builder模式优势

  • 1、可以有多个可变的参数;
  • 2、十分灵活,可以用单个builder构造多个对象;
  • 3、使用Builder模式的客户端代码更利于阅读和编写;
  • 4、线程安全;

5、什么时候使用构建器

如果类的构造器或者静态工厂中具有多个参数,推荐使用Builder模式。

部分内容整理自Effective Java ,原书有更加详细的解释,推荐读者去购买正版并阅读学习,特此说明

【重温设计模式】构建器及其Java示例 在编程的世界里,设计模式是一种让我们的代码更加优雅、可读、可维护的工具。其中,构建器模式是一种创建型模式,它提供了一种高效且灵活的方式来创建复杂对象。这种模式的主要特点是,它分离了对象的构造过程和表示方式,使得同样的构造过程可以创建不同的表示。例如,我们在创建一个复杂的OneMore对象时,可能需要设置许多属性,如果直接在构造函数中一次性设置所有属性,会使得代码难以阅读和维护。而构建器模式则可以将这个过程分解为多个步骤,每一步只负责设置一个属性,使得代码更加清晰。 阅读详情

相关推荐

UVM和System verilog笔记总结(四)

virtual sequence 即虚seq,用于管理多个实sequence的执行顺序。 下面有三个sequence,此时需要virtual sequence去管理这三个的顺序。 virtual sequence和virtual sequencer需要成对写,使用例化实的sequence和sequencer控制: 此时在virtual sequence里面启动,而不是之前在test.sv里面用default或start函数启动。具体方法如下:先例化 再启动,用 `uvm_do_on 实sequence

weixin_42655118的博客 642

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

在了解建造者模式之前需要先了解一下重叠构造器模式和JavaBeans模式,构建者模式是为了优化前两种模式的弊端而产生的。 一:重叠构造器(telescoping constructor)模式 假如一个类中有很多字段,其中只有少数几个字段是必选的(required),其余大部分字段都是可选的(optional),那么该如何创建对象呢? 我们创建一个"营养成分表"类,营养成分在每个食物的包装盒上都有明......

人不风流枉少年 1705

Python控制tek示波器(1)

如何使用Python来控制tek示波器

m0_47441496的博客 3379

Java中builder的使用

builder模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离使用者可以一步一步的构建一个比较复杂的对象。在类中,创建一个静态内部类,包含外部类的全部属性;在内部类中,为每一个属性进行赋值;内部类中创建 build 方法,返回外部类对象在外部类中创建静态 builder方法,返回内部类对象。

仰望天空,妳我亦是行人. 5848

MTK平台 MT6789 烧录 efuse 3.0 Configuration SOP

=====================生成cert1和cert2 key===============================================生成efuse key相关文件===========================================签名DA==========================================================正常编译。=====================Security3.0 的SOP 说明。

a785722173的博客 2329

COCOS 3.8 接入高德定位SDK

/微信登录所必须的code。//是否获得code。

八喜互动 1992

Java设计模式之建造者模式:从入门到架构级实践

建造者模式(Builder Pattern)是一种渐进式对象构造解决方案,最早由《设计模式:可复用面向对象软件的基础》提出。构造过程原子化×配置参数链式化×对象状态不可变经典四角色时代(2004前):严格遵循Director-Builder分离流式接口时代(2004-2014):Joshua Bloch在《Effective Java》提出Builder变体注解驱动时代(2014至今):Lombok等工具实现零编码建造者。

java2cy 1657

UE5 中 Python 编程:Python 代码加载到 UE5 中,如何供蓝图节点调用

配置 python 代码的路径,使 UE5 启动时,加载代码文件。重启之后,在蓝图中右键,就能搜索到你定义的方法了。参数为 str 字符串类型,返回值为 向量数组。注意:一定要 重启 UE5。

topcss的专栏 3996

Java Builder 模式,你搞明白了么?

建造者模式定义 建造者模式又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。下图是建造者模式的通用类图: 在建造者模式中,有如下4种角色: Product:产品角色 Builder:抽象建造者,定义产品...

平头哥的技术博文 1912

55、宇宙微波背景辐射望远镜及其光学系统解析

本文详细解析了宇宙微波背景辐射(CMB)望远镜及其光学系统的设计与优化。内容涵盖折射与反射光学系统的特性、旁瓣控制技术、气球与地面观测系统的对比、探测器阵列的发展、光学系统设计流程以及不同观测场景下的光学系统选择。同时,文章展望了CMB望远镜光学系统的未来发展趋势,包括技术创新、多频段观测、国际合作与大型项目等。通过系统性的分析与对比,为CMB研究提供了全面的技术支持与理论基础。

f9g0h的博客 142

8、 使用TPM密钥:从理论到实践的全面指南

本文全面介绍了如何使用TPM(可信平台模块)进行密钥管理,涵盖密钥的创建、存储、加载、迁移以及特殊密钥类型的使用。通过详细的操作步骤和代码示例,帮助读者掌握TPM密钥管理技术,确保系统的安全性和可靠性。

weixin_36212459的博客 242

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

如上的代码示例中,在静态内部类Builder中,每一个set方法中通过return this,实现了设备值的同时,返回房前Builder对象,可以继续调用set方法,进而实现了链路设置的方式。(2)、定义静态内部类Builder,Builder类包含和实体类相同的属性,以及每个属性的set方法,以及build()方法去调用实体的构造。(3)、构建实例对象时,通过静态内部类Builder进行设值在build()进行实例对象的创建。(2)、相对于构造方法的方式,建造者模式套路更优,无需定义更多的构造方法。

weisian的博客 1160

让 ABAP 开发者也能做出高质量 SAP Fiori:到底需要掌握多少前端知识?

文章摘要: 随着SAP技术演进,ABAP开发者的角色边界正在重构。传统SAP GUI时代的全栈开发模式逐渐转向RAP+Fiori Elements的新范式,其中关键技术变化包括: 开发模式转变:从前后端耦合转向RAP模型驱动开发,通过CDS注解实现UI意图表达 分工优化:Fiori Elements模板处理80%标准UI需求,Flexible Programming Model解决20%差异化需求 效率提升:注解驱动开发可在RAP建模阶段同步定义UI结构,大幅缩短交付周期 工具整合:SAP提供从建模到部署的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 348

Java设计模式——构建器模式【Builder Pattern】(一)

Java设计模式——变种的构建器模式

scorpio的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

通过lombok带你读透Builder构建器

通过lombok带你读透Builder构建器 很久之前,我在《effective java》上看过Builder构建器相关的内容,但实际开发中不经常用。后来,在项目中使用了lombok,发现它有一个注解“@Builder”,就是为java bean生成一个构建器。于是,回头重新复习了下相关知识,整理如下。 1. lombok使用样例 // 创建名为Officer的java bean @Bu...

骏马逸动,心随你动的博客 284

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Effective Java:Builder模式

在Java中遇到多个参数时,有3种方式可以构造类。 一、重叠构造器(telescoping constructor)模式 这种模式下,在类中有多个使用不同参数的构造函数,需要什么参数,就写一个相应的构造函数。结果是随着参数数目的增加,代码臃肿不堪。 二、JavaBean模式 这种模式下,通过调用一个无参构造函数来创建对象,然后通过setter方法来设置必要的参数。这种代码创建实例很容易,读...

随笔 579

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

设计模式 之 流式 Builder 模式(Fluent Builder)

Builder 模式是一种创建型设计模式,用于分步骤构建复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。但在实现方式上,演化出了两种截然不同的风格。表达力优先:代码即文档,结构即语义函数式思维:拥抱 Lambda,简化样板代码开发者体验:虽然学习曲线陡峭,但一旦掌握,效率倍增传统 Builder 像手动挡汽车:控制感强,易于理解;流式 Builder 像自动驾驶:初期需要信任,但用过后就回不去了 (对初学者确实也不友好)

u011962508的博客 924

Rust Builder 设计模式实战指南:用构建器消除构造函数膨胀(基于 rust-patterns 仓库 Creational 模式深度解析)

Builder(构建器)是 Rust 中应用最广泛的创建型(Creational)设计模式之一:它把对象的构造过程委托给一个独立的辅助类型(builder helper),通过一系列链式方法调用逐步配置字段,最后一次性产出目标对象。本文以当前仓库 [src/patterns/creational/builder.md](https://link.gitcode.com/i/f99d6273e79c

gitblog_01148的博客 20

Calligraphy构建器模式深度解析:Android自定义字体终极指南

想要在Android应用中轻松使用自定义字体吗?Calligraphy库为你提供了完美的解决方案!🎯 这个强大的开源库通过巧妙的构建器模式设计,让字体配置变得简单直观。无论你是新手还是资深开发者,都能快速上手,打造独特的应用界面。 Calligraphy是一个专门为Android平台设计的自定义字体库,它采用**构建器模式**让字体配置变得异常简单。通过[CalligraphyConfig.j

gitblog_00479的博客 453

Go Builder 建造者模式

Builder 构建器 动机(Motivation) 在软件系统中,有时候面临“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变? C++中构造函数...

justinsun221的博客 988

Java设计模式之建造者模式(Builder)详解

建造者模式是一种创建型设计模式,用于分步骤构建复杂对象,特别适合多参数配置或复杂初始化场景。其核心价值在于分离构造与表示,通过链式调用提供流畅API,支持参数灵活组合和构造过程可控。典型应用包括复杂对象创建、多参数配置和不可变对象构建等。模式结构包含指挥者、抽象建造者、具体建造者和产品四个角色,体现了单一职责、开闭等设计原则。代码实现中,产品类封装复杂对象属性,建造者接口定义构建步骤,具体建造者实现细节,指挥者控制流程。该模式优化了对象创建过程,提高了代码可读性和可维护性。

夏日清风 2003

【Java】多个构造器参数时应考虑到的构建器 (从 重叠构造器 到 JavaBeans模式 再到 Builder模式)

    说到多个构造器参数,第一个想到的应该是重叠构造器模式: public class UserModel { private String ID; private String name; private String sex; private String password; private String t...

funyoo的博客 354

构建器模式(Builder Pattern)与传统对象创建方式的对比

构建器模式(Builder Pattern)与传统对象创建方式的对比

CccCY_U的博客 545

Android设计模式源码解析之Builder模式

注:在github上无意中看到这篇讲Builder模式在Android源码中应用的文章,结合Android源码分析,非常不错。这是一个系列文章,作者完成了11个模式的分析。另一篇讲Builder的文章(Java方法参数太多怎么办: Builder模式),简明扼要,也非常不错。==================================== 本文为 Android 设计模式源码解析 中 B

夜风的BLOG 1728

KMS_VL_ALL_AIO 实操指南:10 分钟装好 Windows 与 Office 的 KMS 激活和自动续期

重装完 Windows 后,右下角的激活水印反复弹出,打开 Office 又碰到授权提示,手动查密钥、跑命令一套流程下来要折腾大半天。KMS_VL_ALL_AIO 是一个开源的 KMS 激活脚本:它在本地模拟一台 KMS 批量激活服务器,一次运行同时完成 Windows 7–11 与 Office 2010–2024 的激活,并自动安排续期,装好后基本不用再管。 ## 🧩 能力一览:先确认你的

gitblog_00236的博客 1030
上一篇: 基础-1分钟弄清楚Java方法的重载(Overload)与重写(Override)区别
下一篇: 操作系统-进程和线程【区分】
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值