itstack-demo-design建造者模式:装修套餐如何一步步构建,彻底解决长参数构造混乱难题
【免费下载链接】itstack-demo-design:art: 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心,从实际业务中抽离出,交易、营销、秒杀、中间件、源码等22个真实场景,来学习设计模式的运用。欢迎关注小傅哥,微信(fustack),公众号:bugstack虫洞栈,博客:https://bugstack.cn项目地址: https://gitcode.com/fuzhengwei/itstack-demo-design
在《重学Java设计模式》(itstack-demo-design) 项目中,建造者模式(Builder Pattern)通过"装修套餐"场景被完整还原:把吊顶、涂料、地板、地砖逐个"append"进套餐菜单,用链式调用替代冗长的 if-else 分支,彻底解决长参数构造混乱的难题。这套建造者模式案例覆盖了从"痛点代码"到"重构方案"的全过程,非常适合新手理解建造者模式的本质。
🤔 为什么长参数构造会混乱?
想象你要生成一套装修报价,需要指定:吊顶 + 涂料 + 地板/地砖 + 面积 + 等级 + 价格计算规则。如果直接用一个"上帝方法"来处理,代码会变成这样(参考 DecorationPackageController.java):
- 按
level == 1分支,new 出二级吊顶、多乐士涂料、圣象地板,逐个算价; - 按
level == 2分支,再来一遍; - 按
level == 3分支,再来一遍……
三个套餐等级,三段几乎复制粘贴的代码。每增加一个套餐,就要复制修改一大段,参数、对象、计价逻辑全部纠缠在一起,这就是典型的"长参数构造混乱"。
🏗️ 装修套餐如何一步步构建?
建造者模式的核心思路:把一个复杂对象的构建过程,拆成一个个独立的步骤,每步只做一件事,最后统一产出成品。
第一步:统一"材料"抽象
所有装修材料(吊顶、涂料、地板、地砖)都实现同一个 Matter.java 接口,声明scene()场景、brand()品牌、model()型号、price()平米报价、desc()描述。多乐士、立邦、东鹏、马可波罗等 8 个品牌材料类(见 package-info.java)各自实现接口,从此材料可以自由组合。
第二步:菜单"链式"追加,价格自动累计
套餐菜单 DecorationPackageMenu.java 提供四个追加方法:appendCeiling(吊顶按 0.2 倍面积计价)、appendCoat(涂料按 1.4 倍面积计价)、appendFloor和appendTile(按实际面积计价)。
关键在于:每个方法执行完追加和计价后都return this,于是构建过程变成一条流畅的链:
创建菜单(面积、等级)→ 追加吊顶 → 追加涂料 → 追加地板/地砖 → 输出明细
接口 IMenu.java 只暴露这四个追加步骤和getDetail()明细方法,调用方完全感知不到内部的价格计算细节。
第三步:Builder 封装"套餐配方"
Builder.java 作为构建的总控,把三种套餐"配方"写成三个方法:
| 方法 | 套餐等级 | 配方(吊顶 / 涂料 / 地面) |
|---|---|---|
levelOne(area) | 豪华欧式 | 二级顶 / 多乐士 / 圣象地板 |
levelTwo(area) | 轻奢田园 | 二级顶 / 立邦 / 马可波罗瓷砖 |
levelThree(area) | 现代简约 | 一级顶 / 立邦 / 东鹏瓷砖 |
每个方法内部就是一行链式调用:new 菜单 → append 吊顶 → append 涂料 → append 地板,计价规则已内聚在菜单里。原来三段重复代码被压缩成三行声明式的"配方",新增套餐只需加一个方法,再也不会动到已有逻辑。
📌 建造者模式角色对照
| 模式角色 | 项目中的对应 |
|---|---|
| Product(产品) | DecorationPackageMenu装修套餐菜单 |
| Builder(构建步骤) | IMenu接口的appendCeiling/appendCoat/appendFloor/appendTile |
| Director(导演/构建器) | Builder,封装三种套餐配方 |
| 基础部件 | Matter材料族(吊顶/涂料/地板/地砖 8 个品牌) |
运行验证可以查看测试入口 ApiTest.java。
🧭 什么时候该用建造者模式?
- 对象构造参数超过 3 个,且部分参数可缺省;
- 构造过程步骤固定但组合灵活(就像套餐等级不同、材料组合不同);
- 希望链式调用提升可读性,避免
if-else层层分支; - 典型场景:报表导出器、复杂查询条件构建器、配置对象组装。
建造者模式的精髓一句话:"分步构建 + 链式返回 + 统一产出"。通过 itstack-demo-design 这个装修套餐案例(itstack-demo-design-3-00 是材料抽象、itstack-demo-design-3-01 是痛点代码、itstack-demo-design-3-02 是建造者模式重构),新手可以清晰看到设计模式是如何从真实业务中长出来、又如何把混乱代码变得整洁的。
【免费下载链接】itstack-demo-design:art: 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心,从实际业务中抽离出,交易、营销、秒杀、中间件、源码等22个真实场景,来学习设计模式的运用。欢迎关注小傅哥,微信(fustack),公众号:bugstack虫洞栈,博客:https://bugstack.cn项目地址: https://gitcode.com/fuzhengwei/itstack-demo-design
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考