状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态发生改变时改变其行为。这个对象被视为类型的有限状态机(Finite State Machine)。
在状态模式中,我们创建表示各种状态的对象和一个上下文对象(context),该上下文对象持有当前状态的引用,并可以在不同状态之间切换。这些状态对象共享一个公共的接口,以便上下文可以与任何状态对象交互,而无需知道具体是哪个状态。这样,当状态发生改变时,上下文的行为也会相应改变,但上下文本身并不直接修改其状态,而是委托给状态对象来处理状态的转换。
组成
状态接口或抽象类(State)
定义一个接口或抽象类,以封装与特定状态相关的行为。
具体状态类(Concrete State)
实现或继承状态接口或抽象类,每个具体状态类实现与状态相关的行为,并可以定义状态转换的逻辑。
上下文类(Context)
持有一个状态对象的引用,可以委托当前状态对象处理请求,从而使得上下文的行为随状态改变而改变。上下文类通常包含一个或多个与状态相关的方法,这些方法会调用状态对象的方法。
Demo
设计一个交通信号灯系统。交通信号灯有三种状态:红灯(Red)、绿灯(Green)和黄灯(Yellow)。我使用状态模式来实现信号灯状态的切换和状态相关的行为。
定义状态接口 TrafficLightState
package org.example.state;
public interface TrafficLightState {
void change(TrafficLight trafficLight);
}
状态接口具体的实现类 RedState,RedState,RedState
package org.example.state;
public class RedState implements TrafficLightState{
@Override
public void