状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。
状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。
下面是一个例子来说明状态模式的应用:
// 抽象状态类interfaceState{voidhandle(Context context);}// 具体状态类1classConcreteState1implementsState{publicvoidhandle(Context context){System.out.println("当前状态是状态1");
context.setState(newConcreteState2());// 设置下一个状态}}// 具体状态类2classConcreteState2implementsState{publicvoidhandle(Context context){System.out.println("当前状态是状态2");
context.setState(newConcreteState1());// 设置下一个状态}}// 上下文类classContext{privateState state;publicContext(State state){this.state = state;}publicvoidsetState(State state){this.state = state;}publicvoidrequest(){
state.handle(this);}}// 客户端代码publicclassMain{publicstaticvoidmain(String[] args){// 创建初始状态State initialState =newConcreteState1();Context context =newContext(initialState);// 发起请求
context.request();// 打印"当前状态是状态1"
context.request();// 打印"当前状态是状态2"
context.request();// 打印"当前状态是状态1"}}
在上述示例中,状态模式被用于管理上下文(Context)对象的不同状态。每个具体状态(Concrete State)都实现了状态(State)接口,并根据需要进行状态转换。上下文类(Context)通过委托给当前状态对象来处理请求,并可以在运行时更改状态。
通过状态模式,客户端代码可以与上下文对象进行交互,而不需要直接处理复杂的状态逻辑。这对于需要根据状态改变行为的场景非常有用,例如自动售货机中的不同状态(待机、售货、缺货等)的管理。
版权归原作者 半核CPU 所有, 如有侵权,请联系我们删除。