设计模式之状态模式
状态行为模式属于设计模式中的行为模式的分类,行为模式一般指会涉及到算法以及对象间的职责分配。行为模式不但描述对象或类的模式,还描述其中的通信模式。
行为模式通常使用对象间的复合而不是继承来完成对象功能的增强。
下面为了引入状态模式(state),首先设想一种场景:
还是拿领导说事,下属观察领导有三种不同的状态,分别是happy、bad以及normal,此时下属向领导请示根据领导不同的状态会收到不同的回应。
如果master在happy状态,收到request时会回应:agree
如果是在bad状态,收到request时会回应:out
如果是在normal状态,收到request的回应是:discuss
也就是说领导的不同反应依赖其当时的状态,那么我们如何来实现上面的场景呢?通常来讲,我们可以使用IF语句,if..if,这样当然可以,但IF语句最大的问题就是在复杂逻辑情况下会导致其极具膨胀从而降低其可维护性。
我们观察,领导的反应依赖于状态,因此为何不将状态和行为捆绑,该场景的模拟直接可以简化为对经理状态的管理,这样既可以降低IF语句的复杂度,又可以引用状态管理的逻辑,其状态的管理,既可以在逻辑驱动部分实现,也可以在具体的状态间实现,从而实现了状态的灵活迁移。
从GOF上找出类图来说明一下:

从上图可见,行为被委托给了状态,而该状态是STATE接口的具体实现。
GOF中对state模式还有进一步的说明,如状态管理,状态的初始化声明等,这些在我们具体应用的时候应该会有所取舍,这里就不做赘述了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述