这个项目主要是总结我在工作/实习/项目中用到的设计模式. 这些设计模式的案例, 几乎都是来源于真实的项目.
说起状态模式, 就不得不提到状态机. 说起状态机的使用, 就不得不提到我的实习.
在实习过程中, 有一种ETL任务是这样的, 将sql查询出来的结果集导出到某种数据库中, 其中涉及到了sql版本管理与上下线的需求. 用户可以编辑sql, 保存不同的sql版本, 可以上线或者下线某个的sql版本, 上线时还要进行审批. 那么这个sql版本就要在上线, 下线, 审批中, 审批不通过等等状态中进行流转. 于是就用各种方式实现了一下状态机.
这个在我的博客中有详细的介绍: https://juejin.cn/post/7275222603886002188
这里主要展示了spring状态机在sql版本上下线中是如何使用的.
这里主要展示了状态集合实现的状态机在sql版本上下线中是如何使用的, 这相当于一个简易版的spring状态机.
这里主要展示了状态模式实现的状态机在sql版本上下线中是如何使用的. 从中能看到状态模式的一些弊病, 虽然它去掉了大量switch case或者if else控制状态的代码, 但是不完全符合开闭原则, 新增或者删除状态需要修改状态机代码, 新增事件也需要修改很多代码.