欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 23种设计模式中的状态模式

23种设计模式中的状态模式

2025/3/28 8:05:53 来源:https://blog.csdn.net/cijiancao/article/details/146388354  浏览:    关键词:23种设计模式中的状态模式

状态模式是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为,看起来好像改变的是这个对象的类。

状态模式经常用在带有状态的对象中。

什么是状态?假设一个对象,有如下三种状态:

  • 开始状态

  • 运行状态

  • 结束状态

定义一个枚举类,表示不同的状态,但是不同的状态需要表现不同的行为,如下:

if(state == START){// 执行开始状态下逻辑
}else if(state == RUNNABLE){// 执行运行状态下逻辑
}else if(state == STOP){// 执行结束状态下逻辑
}

状态模式设计的目的是为了把上述一大堆 if else 代码拆分为不同的状态,然后封装成不同的状态类,使得将来增加状态比较容易。

接下来,使用状态模式优化上述代码。

定义状态接口:

// 定义状态接口
interface State {void doAction(Context context);
}

对于开始状态,设计如下:

// 开始状态类
class StartState implements State {@Overridepublic void doAction(Context context) {System.out.println("Start State");context.setState(new RunState());}
}

对于运行状态,设计如下:

// 运行状态类
class RunState implements State {@Overridepublic void doAction(Context context) {System.out.println("Run State");context.setState(new StopState());}
}

对于停止状态,设计如下:

// 停止状态类
class StopState implements State {@Overridepublic void doAction(Context context) {System.out.println("Stop State");context.setState(new StartState());}
}

状态模式设计的关键设计思想在于状态切换,我们引入一个context负责状态管理:

class Context {private State state;public State getState() {return state;}public void setState(State state) {this.state = state;}public void doAction() {state.doAction(this);}
}

这样,就完成了一个状态模式的实现,测试下效果:

public class StatePatternDemo {public static void main(String[] args) {Context context = new Context();context.setState(new StartState());context.doAction(); // Start State -> Run Statecontext.doAction(); // Run State -> Stop Statecontext.doAction(); // Stop State -> Start State}
}

总结

状态模式的设计思想在于把不同的状态逻辑拆分封装到不同的状态类中,从而使得后续增加新状态更容易。

状态模式的实现关键在于状态的切换。状态既可以由调用方负责切换,也可以在状态内部自己根据不同条件完成切换。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词