网易首页 > 网易号 > 正文 申请入驻

构造函数参数堆成墙?Builder模式三步拆解复杂对象

0
分享至

一个轮播组件需要多少个参数?条目数、构建函数、控制器、高度、视口比例、自动播放设置、翻页回调、无限滚动配置——列出来能写满一屏。HTTP请求也不省心,URL、请求头、认证令牌、请求体、超时时间、重试逻辑,每个都要配。通知消息更别提,标题、正文、图标、渠道、优先级、声音、震动、按钮,一个都不能少。

面对这种复杂度,最直接的想法是写一个带很多参数的构造函数。能用,但问题会随着对象变复杂而不断累积:参数难以区分、可选参数到处要判空、参数顺序容易搞错。最终,构造函数调用变成一堵没人愿意读、更没人愿意维护的"参数墙"。


Builder模式解决的就是这个问题

Builder模式是一种创建型设计模式,专门处理需要多步配置的复杂对象构建。它把两件经常纠缠在一起的事分开了:对象是什么,以及对象怎么被构建。对象自己持有数据和行为,Builder持有构建逻辑,一步步累积配置,最后产出最终对象。

这样做的结果是,构建过程读起来像在描述你要建什么,而不是在向构造函数传一列值。代码的可读性和可维护性,从根源上得到了改善。

核心组件与链式调用

Builder模式的核心组件包括:产品(最终要构建的复杂对象)、Builder接口(定义构建步骤)、具体Builder(实现构建步骤)、以及Director(可选,控制构建顺序)。

方法链(Fluent Interface)是Builder模式最常见的实现方式。每个设置方法返回this,让调用可以连续串联:

builder.setHeight(200).setViewportFraction(0.97).setAutoplay(true).build()

这种写法让配置过程像读句子一样流畅,每个方法名都在说明自己在设置什么,参数顺序问题彻底消失。

两个真实案例

第一个案例是Flutter的轮播组件。不用Builder模式时,CarouselSlider.builder的构造函数调用是一大坨嵌套的配置对象,读起来费劲,改起来更费劲。用Builder模式重构后,每个配置项变成独立的方法调用,代码结构清晰,想改哪个配置直接找到对应方法就行。

第二个案例是HTTP请求构建。URL、请求头、认证、超时、重试逻辑,这些配置项用Builder模式组织后,请求的构建过程一目了然。新增一个配置项只需要加一个方法,不影响已有调用。

Builder vs 构造函数 vs 工厂

构造函数适合简单对象,参数少、配置固定。工厂模式适合需要封装创建逻辑、返回不同子类的场景。Builder模式则适合参数多、配置灵活、构建步骤复杂的对象。

三者的边界并不绝对,但判断标准很实用:如果构造函数参数超过四五个,或者有大量可选参数,Builder模式通常是更好的选择。

什么时候用,什么时候别用

适合用Builder的场景:对象需要多个配置步骤、有大量可选参数、配置项可能变化、希望构建过程可读性强。不适合的场景:对象很简单、参数固定不变、团队不熟悉模式反而增加理解成本。

Builder模式不是银弹,但在复杂对象构建这件事上,它确实提供了一条比"参数墙"优雅得多的路径。下次再遇到构造函数参数堆成墙的情况,值得试试这个模式。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
尼泊尔用无人机搜救幸存者,播放歌曲等回应,隧道被泥浆“像牙膏一样”塞满

尼泊尔用无人机搜救幸存者,播放歌曲等回应,隧道被泥浆“像牙膏一样”塞满

红星新闻
2026-09-02 16:23:27
星宇的大麻烦来了

星宇的大麻烦来了

大张的自留地
2026-09-01 13:43:26
破鼓万人锤!奔驰大众调查,竞品对接其客户,星宇真要肉疼了!

破鼓万人锤!奔驰大众调查,竞品对接其客户,星宇真要肉疼了!

天天热点见闻
2026-09-02 10:56:17
94岁香港艺人刘兆铭离世,晚年病痛缠身轮椅代步,48岁才入行演戏

94岁香港艺人刘兆铭离世,晚年病痛缠身轮椅代步,48岁才入行演戏

喜欢历史的阿繁
2026-09-03 02:17:48
女子跳河前回望3秒, 闺蜜追出数百米扯落外衣:那一眼让人心碎

女子跳河前回望3秒, 闺蜜追出数百米扯落外衣:那一眼让人心碎

爱下厨的阿酾
2026-09-03 12:04:42
街上越来越多女性不穿胸罩,高跟鞋几乎绝迹:这是身体的解放!

街上越来越多女性不穿胸罩,高跟鞋几乎绝迹:这是身体的解放!

另子维爱读史
2026-08-25 20:02:40
看了胡军才知道,最高级的炫富是刻在骨子里的边界感

看了胡军才知道,最高级的炫富是刻在骨子里的边界感

娱乐圈十三太保
2026-08-26 15:56:43
G20公报上写“美国优先”?中国一票否决,不陪特朗普演大戏

G20公报上写“美国优先”?中国一票否决,不陪特朗普演大戏

枫红染山径
2026-09-03 11:45:06
火箭一夜4消息!阿门冲联盟前20,杜兰特99.1%历史第2+申京伊森苦

火箭一夜4消息!阿门冲联盟前20,杜兰特99.1%历史第2+申京伊森苦

锅子篮球
2026-09-03 12:21:03
公务员可以做的七种副业,不再纳入纪委严控,不算违纪!

公务员可以做的七种副业,不再纳入纪委严控,不算违纪!

职场资深秘书
2026-09-03 12:54:46
女友认定路由器就是游戏机 于是暴怒砸家!

女友认定路由器就是游戏机 于是暴怒砸家!

游民星空
2026-09-01 18:16:26
从143降到102,肚子变平才知道:内脏脂肪最怕的不是跑步

从143降到102,肚子变平才知道:内脏脂肪最怕的不是跑步

健身狂人
2026-09-01 07:37:21
形势严峻!一汽奥迪三个月无一款车型零售量过9000台

形势严峻!一汽奥迪三个月无一款车型零售量过9000台

辣椒车讯
2026-09-03 08:58:02
豆包说要生两个一儿一女,我让它说句真心话,看完沉默了!

豆包说要生两个一儿一女,我让它说句真心话,看完沉默了!

另子维爱读史
2026-09-02 19:44:54
38岁老板娘沦为陪睡工具:揭秘黑茶高端骗局,入局者10有9个离婚

38岁老板娘沦为陪睡工具:揭秘黑茶高端骗局,入局者10有9个离婚

江启
2026-09-03 00:54:33
女子需求大偷情10年,28岁的情夫吃不消想分手,2017年她雇来杀手弄残情夫

女子需求大偷情10年,28岁的情夫吃不消想分手,2017年她雇来杀手弄残情夫

汉史趣闻
2026-09-03 11:39:41
特朗普:如果再有第3次,伊朗将作为一个国家被彻底抹除!

特朗普:如果再有第3次,伊朗将作为一个国家被彻底抹除!

究竟谁主沉浮
2026-09-02 18:35:42
中国男子被美国ICE拘留次日身亡,外媒称至少是第5名在羁押期间死亡的中国公民

中国男子被美国ICE拘留次日身亡,外媒称至少是第5名在羁押期间死亡的中国公民

扬子晚报
2026-09-03 10:46:12
画西方英雄目光如炬,画红军像三天没睡:这位教授,你管这叫“去脸谱化”?

画西方英雄目光如炬,画红军像三天没睡:这位教授,你管这叫“去脸谱化”?

浯江孤舟
2026-08-16 20:44:56
孙艺珍玄彬一家度假被偶遇,她这裤子真是瞎穿,难怪孔孝真说她土

孙艺珍玄彬一家度假被偶遇,她这裤子真是瞎穿,难怪孔孝真说她土

八怪娱
2026-09-02 16:04:34
2026-09-03 14:16:49
像素与芯片
像素与芯片
有态度网友ytd
226文章数 68关注度
往期回顾 全部

科技要闻

大模型扎堆!谷歌刚发,Meta就跟上

头条要闻

尼泊尔父亲山洪后借钱徒步找19岁儿子:他肯定能跑掉

头条要闻

尼泊尔父亲山洪后借钱徒步找19岁儿子:他肯定能跑掉

体育要闻

小卡回应处罚:不知晓任何规避工资帽意图

娱乐要闻

德云社停更20天再营业!

财经要闻

再见了,期房!商品房预售制卒于2026

汽车要闻

实拍捷途旅行者7 风格更潮/混动版配上华为乾崑ADS 5

态度原创

时尚
本地
亲子
家居
军事航空

“卡普里裤”今年秋天又流行回来了,这样穿时髦又显高!

本地新闻

昆明的雨,解锁汪曾祺的浪漫雨季

亲子要闻

儿子说不去幼儿园是因为里面有大毛猴!

家居要闻

2026建博会(广州) 公装联探展交流活动

军事要闻

乌特工内战街头对射 互认对方为"俄特工"

无障碍浏览 进入关怀版