本文节选自《设计模式就该这样学》
1 状态模式的UML类图
状态模式的UML类图如下图所示。
2 使用状态模式实现登录状态自由切换
当我们在社区阅读文章时,如果觉得文章写得很好,我们就会评论、收藏两连发。如果处于登录情况下,则可以直接做评论、收藏这些行为。否则,跳转到登录界面,登录后再继续执行先前的动作。这里涉及的状态有两种:登录与未登录;行为有两种:评论和收藏。下面使用状态模式来实现这个逻辑,代码如下。
首先创建抽象状态角色UserState类。
1 | java复制代码 |
然后创建登录状态LogInState类。
1 | java复制代码 |
创建未登录状态UnloginState类。
1 | java复制代码 |
创建上下文角色AppContext类。
1 | java复制代码 |
最后编写客户端测试代码。
1 | java复制代码 |
运行结果如下图所示。
3 使用状态机实现订单状态流转控制
状态机是状态模式的一种应用,相当于上下文角色的一个升级版。在工作流或游戏等各种系统中有大量使用,如各种工作流引擎,它几乎是状态机的子集和实现,封装状态的变化规则。Spring也提供了一个很好的解决方案。Spring中的组件名称就叫作状态机(StateMachine)。状态机帮助开发者简化状态控制的开发过程,让状态机结构更加层次化。下面用Spring状态机模拟一个订单状态流转的过程。
3.1 添加依赖。
1 | java复制代码 |
3.2 创建订单实体Order类。
1 | java复制代码 |
3.3 创建订单状态枚举类和状态转换枚举类。
1 | java复制代码 |
3.4 添加状态流转配置。
1 | java复制代码 |
3.5 添加订单状态监听器。
1 | java复制代码 |
3.6 创建IOrderService接口。
1 | java复制代码 |
3.7 在Service业务逻辑中应用。
1 | java复制代码 |
3.8 编写客户端测试代码。
1 | java复制代码 |
通过这个真实的业务案例,相信小伙伴们已经对状态模式有了一个非常深刻的理解。
关注『 Tom弹架构 』回复“设计模式”可获取完整源码。
本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注『 Tom弹架构 』可获取更多技术干货!
本文转载自: 掘金