什么时候可以使用状态机模式呢?(状态比较少时都是可以使用状态机模式的)
比如:开灯,关灯。可以使用状态机模式处理
:敌人巡逻,当玩家到了警戒距离时,就会追击玩家,当到达了攻击距离就会攻击敌人。
巡逻-----追击----攻击—巡逻
代码实现:
//状态控制类
public class ControlState
{
public State state;
//切换状态
public void SetState(State state)
{
this.state = state;
}
public void Control()
{
state.Handle( this );
}
}
//状态接口
public interface State
{
void Handle(ControlState controlState);
}
//巡逻状态
public class PatrolState : State
{
public void Handle(ControlState controlState)
{
//当玩家到了警戒线时
controlState.SetState( new FollowState( ) );
}
}
//追击状态
public class FollowState : State
{
public void Handle(ControlState controlState)
{
//当到达了攻击距离时
controlState.SetState( new AktState( ) );
}
}
//攻击状态
public class AktState : State
{
public void Handle(ControlState controlState)
{
{
//当玩家死亡;进入巡逻状态
controlState.SetState( new PatrolState( ) );
}
{
//当玩家走出攻击距离时:进入追击状态
controlState.SetState( new FollowState( ) );
}
}
}
状态机模式的优点:
将状态判断逻辑放在每个状态类里面,可以简化判断的逻辑。
当有新的状态出现时,可以通过添加新的状态类来进行扩展,扩展性好。