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

教科书里的状态模式,一上真实业务就翻车?FSM才是正解

0
分享至

学设计模式的时候,GoF(Gang of Four,四人组)的经典状态模式几乎是必考内容。它看起来完美解决了那些又大又丑的switch语句,面试时画个类图,面试官频频点头。

但真到了写业务代码的时候,很多人会撞上一堵墙——这模式怎么越用越别扭?每个状态类都跟其他状态类纠缠不清,改一个需求要动一堆文件。如果你也有这种感觉,那你的直觉没错。


问题出在哪?GoF状态模式的核心思想是“把工作分散出去”:主对象把逻辑委托给各个状态对象,但状态类自己负责触发下一个状态的切换。听起来很合理,对吧?

举个最简单的例子:红绿灯。红灯变绿灯,绿灯变黄灯,黄灯变红灯,无限循环。

class RedState implements TrafficLightState {change(context: TrafficLight): void {console.log("RED light, Stop");context.setState(new GreenState()); // 这里就耦合了!}

问题立刻暴露:RedState被迫知道了GreenState的存在。红绿灯这种封闭循环还好,规则永远不会变,耦合就耦合了。但真实业务哪有这么简单?

业务规则一变,状态模式就崩了

想象一下,市议会突然出新规定:午夜到凌晨5点,红绿灯必须闪黄灯。这时候你得打开RedState和YellowState,加时间判断,再加一个新的闪烁状态。状态越多,代码越乱,每个类都要知道其他所有类的存在。

真实世界的流程从来不是直线。一个电商订单不会老老实实从“待付款”走到“已发货”再到“已签收”。它可能从“待付款”直接跳到“已取消”,也可能从“已发货”变成“已退货”。

如果用GoF状态模式,你的PendingState(待付款状态)得知道多少个其他状态?它要处理支付成功、取消订单、超时关闭……这个类会膨胀到你不想看它。

FSM:把控制权收回来

这时候就该有限状态机(FSM,Finite State Machine)出场了。它的核心思路正好相反:集中控制

状态类变得非常简单,只负责自己内部该干什么。状态之间的跳转逻辑,全部交给一个中央控制器——我们叫它Orchestrator(编排器)。

const orderRules = {PENDING: {PAID: "SHIPPED",CANCELLED: "CANCELLED",},SHIPPED: {ARRIVED: "DELIVERED",RETURNED: "RETURNED",},class OrderController {currentState = "PENDING";handleEvent(event: string) {const nextState = orderRules[this.currentState]?.[event];if (nextState) {this.currentState = nextState;// 在这里执行状态逻辑} else {console.log("非法跳转!");}

这段代码的精髓在于:状态转移规则被集中在一张表里。新增一个状态?加一行配置就行。禁止某个跳转?不写那条规则就行。所有状态之间的关系一目了然,再也不用翻遍每个状态类去找谁调用了谁。

什么时候该用哪个?

这不是说GoF状态模式一无是处。它适合状态数量少、转移关系固定、几乎不会变的场景——比如红绿灯、电梯控制、TCP连接状态。这些场景状态之间天然解耦,每个状态确实只需要关心自己。

但一旦你的业务规则频繁变化、状态跳转路径复杂、或者有大量条件分支,FSM就是更稳的选择。它把最容易变的部分(状态转移规则)集中管理,让状态类保持纯粹。

判断标准很简单:如果改一个状态需要动其他状态类,你就该考虑FSM了。别让教科书里的经典模式绑架你的真实代码。

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

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.

相关推荐
热点推荐
原来是亲兄弟!哥哥身价415亿,弟弟身价425亿,双双问鼎厦门首富

原来是亲兄弟!哥哥身价415亿,弟弟身价425亿,双双问鼎厦门首富

生活新鲜市
2026-08-26 12:59:52
13亿没白交:保变被印度掏空技术扫地出门,如今新规焊死技术闸门

13亿没白交:保变被印度掏空技术扫地出门,如今新规焊死技术闸门

无情有思ss
2026-08-19 06:21:47
美国为什么急着派情报头子去莫斯科

美国为什么急着派情报头子去莫斯科

小眼睛小世界
2026-08-26 08:41:49
印媒破防:中国歼-16追着“阵风”打,是埃及飞行员菜,印度飞行员开“阵风”就不怕歼-16

印媒破防:中国歼-16追着“阵风”打,是埃及飞行员菜,印度飞行员开“阵风”就不怕歼-16

蓝星杂谈
2026-08-26 09:00:31
5张高清照片,定格了一名落单志愿军战士被俘全过程

5张高清照片,定格了一名落单志愿军战士被俘全过程

小莜读史
2026-08-24 08:23:18
嘲讽宝马奔驰暴跌三成,却无视自己暴跌五成,谁更没脸?

嘲讽宝马奔驰暴跌三成,却无视自己暴跌五成,谁更没脸?

柏铭锐谈
2026-08-25 22:02:45
越南准备成为下一个乌克兰?一旦中越开战,中国绝不会再手下留情

越南准备成为下一个乌克兰?一旦中越开战,中国绝不会再手下留情

掉了颗大白兔糖
2026-08-22 13:04:41
“扶老人被索赔1.9万元”事件死者亲属发声:不可能退还赔偿 老人是牌馆常客 被老板扶出时摔倒 外面热还继续“拖”

“扶老人被索赔1.9万元”事件死者亲属发声:不可能退还赔偿 老人是牌馆常客 被老板扶出时摔倒 外面热还继续“拖”

闪电新闻
2026-08-26 22:26:09
为什么“产能过剩”被视为一种灾难?

为什么“产能过剩”被视为一种灾难?

罗sir财话
2026-08-25 11:42:11
中国男篮胜卡塔尔概率88% 东道主轮休多主力献礼 杨瀚森登FIBA首页

中国男篮胜卡塔尔概率88% 东道主轮休多主力献礼 杨瀚森登FIBA首页

颜小白的篮球梦
2026-08-27 13:12:12
特朗普妥协,美伊达成停火共识!国际油价暴跌6%,中东变天?

特朗普妥协,美伊达成停火共识!国际油价暴跌6%,中东变天?

叮当当科技
2026-08-27 02:10:07
香港呼吁:不要食用

香港呼吁:不要食用

南方都市报
2026-08-27 08:17:19
刘翔分钱的瓜爆了,震惊全网!

刘翔分钱的瓜爆了,震惊全网!

财经三分钟pro
2026-08-27 11:00:28
董路:每年花国家那么多钱,跪下!给宋凯丢脸 别把老百姓当傻子

董路:每年花国家那么多钱,跪下!给宋凯丢脸 别把老百姓当傻子

念洲
2026-08-27 07:10:19
无需联合国授权!日本收到通牒,毁灭性打击摆上台,3国统一战线

无需联合国授权!日本收到通牒,毁灭性打击摆上台,3国统一战线

爱下厨的阿酾
2026-08-22 16:21:16
美国准备豁出去,凌晨2点准时动手,中方做好最坏打算,奉陪到底

美国准备豁出去,凌晨2点准时动手,中方做好最坏打算,奉陪到底

墨兰史书
2026-08-26 02:20:08
9月起,3大生肖逆风翻盘!财运扎堆上门,贵人常驻,月月聚财享福

9月起,3大生肖逆风翻盘!财运扎堆上门,贵人常驻,月月聚财享福

情感事聊
2026-08-23 10:29:00
演唱会偶遇王菲:原相机直拍,曾经风光的天后,终究还是老了

演唱会偶遇王菲:原相机直拍,曾经风光的天后,终究还是老了

情感大头说说
2026-08-26 08:39:52
湖南长沙一建筑工地3名工人坠亡,事故原因调查中

湖南长沙一建筑工地3名工人坠亡,事故原因调查中

界面新闻
2026-08-26 20:06:19
笑死,这就是中年夫妻旅游现状吗?网友:出门必吵

笑死,这就是中年夫妻旅游现状吗?网友:出门必吵

夜深爱杂谈
2026-08-02 19:19:06
2026-08-27 14:56:49
薛定谔的BUG
薛定谔的BUG
有态度网友ytd
333文章数 88关注度
往期回顾 全部

科技要闻

苹果邀请函:新CEO、折叠屏iPhone都要来了

头条要闻

吉隆泥石流致3死558失联 亲历者:若早二十分钟不敢想

头条要闻

吉隆泥石流致3死558失联 亲历者:若早二十分钟不敢想

体育要闻

因为这条规则,欧联冠军一个夏天散伙了

娱乐要闻

包贝尔承认将柳岩推下水片段引爆热搜

财经要闻

英伟达,营收翻倍大增,指引碾压预期

汽车要闻

搭华为ADS 5/增程纯电可选 阿尔法T7预售13.78万起

态度原创

亲子
教育
家居
旅游
公开课

亲子要闻

别让“减肥速成班”透支孩子的健康

教育要闻

2029年起,山东夏季高考考试时间调整为3天

家居要闻

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

旅游要闻

入境游持续升温 国货圈粉海外游客

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版