【设计模式 11】建造者:配置像天书

这一课讲建造者模式。什么在变:构造参数越来越复杂,组合关系越来越难。怎么挡:分步引导,每步只问一个问题,最后拼出完整对象。

赵闯带回来的投诉单,林衍看了三遍才看懂。

客户是一个上市公司的董事长,姓魏。定制了一整套书房家具------书桌、书柜、展示柜、座椅、落地灯。交货那天魏董亲自验货,然后一条一条划出问题:书桌木材不是他选的黑胡桃,是普通胡桃木。五金件没有升级成黄铜。座椅的皮质不是头层牛皮。展示柜的灯带颜色不对。

赵闯脸色不好看:"这单一千二百万,魏董是老客户。"

林衍让人调了订单。订单表发过来的时候他明白为什么出错了。

一张表格,二十三个字段。木材类型、木材等级、五金材质、五金品牌、漆面工艺、漆面色号、皮质类型、皮质颜色、灯带类型、灯带色温、玻璃类型、玻璃厚度、尺寸定制方向、尺寸数值、包装方式、安装方式、售后级别、保修年限、 刻字内容、刻字字体、刻字位置、配送时间、安装时间。

二十三个。其中十六个是可选的。可选字段之间有依赖关系:选了头层牛皮就不能选布艺坐垫;选了黄铜五金就不能选黑色五金;选了灯带就必须选电源方案。

销售在填这张表的时候,选了黑胡桃木(字段3)、黄铜五金(字段5)、头层牛皮(字段8)。

但他漏填了一个字段:木材等级(字段4)。系统默认填了"普通级"。所以最终出的是普通胡桃木而不是黑胡桃。

一千二百万的单子,毁在一个默认值上。


林衍把产品经理李婷和IT总监叫到一起。

"这张表谁能填对?"

李婷诚实地说:"我填也会填错。二十三个字段,十六个可选,还有依赖关系。上次我自己测试新型号都填错了两次。"

IT总监说:"可以加校验。但校验规则有四十多条,加完之后用户填错了会报错,但不知道怎么改。"

林衍问了一个更根本的问题:"为什么让客户一次填二十三个字段?"

没人回答。

"客户买家具的时候是这么想的吗?坐在电脑前打开一张表格,然后一个字段一个字段地填?不是。客户想的是:我要一张书桌,黑胡桃的,黄铜五金,头层牛皮座椅。三句话。"

林衍在白板上画了一个流程:

第一步:选品类。(书桌、书柜、展示柜、座椅、落地灯)

第二步:选木材。(黑胡桃、白橡、樱桃木、普通胡桃)

第三步:选五金。(黄铜、不锈钢、黑色合金)

每一步只问一个问题。每个问题只展示跟当前选择相关的选项。选了黑胡桃之后,"木材等级"自动默认最高级,因为黑胡桃只有一个等级,不需要选。选了黄铜之后,"漆面"自动限定在跟黄铜兼容的范围内。

客户走完所有步骤,系统自动拼出完整的二十三字段订单。客户不需要看到那二十三个字段。

"一步一步来,每一步只做一件事,最后拼出完整订单。不是让客户一次性面对二十三个空。"

李婷说:"那加一个新的配置项呢?"

"加一步就行。不需要改其他步骤。"

林衍在白板上画的那个流程------一步一步来,每一步只问一个问题------在程序设计里有一个名字:建造者模式

把构造过程拆成一步一步的,每一步设一个参数,最后拼出完整对象。参数之间的组合逻辑是建造者的事,调用方不管。
uses
creates
OrderProcess
-builder: OrderBuilder
+construct()
<<interface>>
OrderBuilder
+buildFrame() : OrderBuilder
+buildSurface() : OrderBuilder
+buildHardware() : OrderBuilder
+buildFinish() : OrderBuilder
+getResult() : Order
CustomOrderBuilder
-order: Order
+buildFrame() : OrderBuilder
+buildSurface() : OrderBuilder
+buildHardware() : OrderBuilder
+buildFinish() : OrderBuilder
+getResult() : Order
Order
-fields: dict

林衍在白板上画的那个流程就是 Director,每一步只问一个问题------选品类、选木材、选五金------最后拼出完整的二十三字段订单。

孙子说:"谋无不听,则必成大事。"一步一步想清楚,每一步都不出错,大事就成了。建造者模式不是让客户一次面对二十三个空,是牵着客户的手一步一步走。


本文所有人物、情节、公司名均为虚构,如有雷同,纯属巧合。

相关推荐
workflower8 小时前
例二:某汽车制造企业深度融合AI智能体,构建园区网络的智能运维体系
人工智能·机器学习·设计模式·机器人·云计算·汽车·制造
ly76899 小时前
Java 设计模式详解:从原则到 23 种经典模式
java·开发语言·设计模式
AI人工智能+电脑小能手12 小时前
大白话说Java设计模式-14-适配器模式(业务实战篇)
java·设计模式·适配器模式·系统兼容·多渠道对接
略略略咯咯20 小时前
(总结)设计模式
设计模式
Cosolar1 天前
DeepSeek Harness 理解 Harness 的设计哲学 - 可组合的插件运行时
人工智能·设计模式·架构
Nebula_g1 天前
JavaSE基础语法:特殊类(特殊情景下的设计模式)
java·开发语言·设计模式
George_Ye2 天前
同一本书,一人一份:我如何设计 AI 个性化扫书报告
设计模式
莫得感情 o2 天前
设计模式 22 · 三个冷门模式:中介者、访问者、解释器
java·设计模式
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
AustinXu3 天前
从 Claude Code 到 Claude Tag,Harness Engineering 走到了组织这一层
设计模式·团队管理