状态模式 小鱼儿 2021-09-17 02:38 340阅读 0赞 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是的当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 好处:消除庞大的条件分支语句,将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。 通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。 实例UML图: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdfc2h1eXU_size_16_color_FFFFFF_t_70][] 实例代码: /** * @author Shuyu.Wang * @package:com.shuyu.state * @description:state类接口,定义一个接口以封装与Context的一个特定状态相关的行为 * @date 2018-11-25 21:23 **/ public interface State { void doAction(Context context); } /** * @author Shuyu.Wang * @package:com.shuyu.state * @description:维护一个子类的实例,这个实例定义当前的状态 * @date 2018-11-25 21:24 **/ public class Context { private State state; public Context(){ state=null; } public State getState() { return state; } public void setState(State state) { this.state = state; } } /** * @author Shuyu.Wang * @package:com.shuyu.state * @description:实现类接口 * @date 2018-11-25 21:38 **/ @Slf4j public class StartState implements State { @Override public void doAction(Context context) { log.info("开始状态"); context.setState(this); } @Override public String toString() { return "Start State"; } } /** * @author Shuyu.Wang * @package:com.shuyu.state * @description: * @date 2018-11-25 21:54 **/ @Slf4j public class StopState implements State { @Override public void doAction(Context context) { log.info("结束状态"); context.setState(this); } @Override public String toString() { return "Stop State"; } } 测试代码: @RunWith(SpringRunner.class) @SpringBootTest public class StateApplicationTests { @Test public void contextLoads() { Context context = new Context(); StartState startState = new StartState(); startState.doAction(context); System.out.println(context.getState().toString()); StopState stopState = new StopState(); stopState.doAction(context); System.out.println(context.getState().toString()); } } 执行结果: 2018-11-25 22:06:34.619 INFO 27796 --- \[ main\] com.shuyu.state.StartState : 开始状态 Start State 2018-11-25 22:06:34.620 INFO 27796 --- \[ main\] com.shuyu.state.StopState : 结束状态 github代码地址:[https://github.com/iot-wangshuyu/designpatterns/tree/master/state][https_github.com_iot-wangshuyu_designpatterns_tree_master_state] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdfc2h1eXU_size_16_color_FFFFFF_t_70]: /images/20210901/464f0db866594a6096ab0d879445e3cd.png [https_github.com_iot-wangshuyu_designpatterns_tree_master_state]: https://github.com/iot-wangshuyu/designpatterns/tree/master/state
相关 状态模式(状态机) 以前写状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章[《c语言设计模式–状态模式(状态机)》][c](来源: 忘是亡心i/ 2023年02月20日 07:08/ 0 赞/ 154 阅读
相关 状态模式 状态模式定义: 英文定义:The State Pattern allows an object to alter its behavior when its interna 落日映苍穹つ/ 2022年08月02日 12:57/ 0 赞/ 26 阅读
相关 状态模式 原文链接:[http://www.tutorialspoint.com/design\_pattern/state\_pattern.htm][http_www.tutoria 亦凉/ 2022年07月21日 09:00/ 0 赞/ 37 阅读
相关 状态模式 一、动机与定义 1、现实世界中的情况 > 在现实世界中,有很多事物的行为是和它当前所处的状态紧密相关的,比如水的三态下分别有各自独特的行为,人在处于不同的状态是会有 刺骨的言语ヽ痛彻心扉/ 2022年07月16日 00:24/ 0 赞/ 85 阅读
相关 状态模式 //表示状态的接口类 public interface State { void smile(); void cry(); voi r囧r小猫/ 2022年06月10日 05:14/ 0 赞/ 223 阅读
相关 状态模式 转载请注明链接:[https://blog.csdn.net/feather\_wch/article/details/78647901][https_blog.csdn.ne 偏执的太偏执、/ 2022年06月05日 12:15/ 0 赞/ 238 阅读
相关 状态模式 1.使用场景: 常见的应用场景有线程对象各个状态之间的切换或者各种账号状态的管理等 2.UML表示 状态模式中主要有以下的几大角色: 2.1Context:环 淩亂°似流年/ 2022年05月31日 09:26/ 0 赞/ 211 阅读
相关 状态模式 状态模式 一、概述 1. 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。 2. 结构 Context环境类:环境类中维护 短命女/ 2022年04月17日 00:18/ 0 赞/ 236 阅读
相关 状态模式 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是的当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑 小鱼儿/ 2021年09月17日 02:38/ 0 赞/ 341 阅读
相关 状态模式 状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态... 小灰灰/ 2020年06月13日 05:49/ 0 赞/ 756 阅读
还没有评论,来说两句吧...