设计模式——---------------------------------状态机模式

24 篇文章 0 订阅
6 篇文章 0 订阅

什么时候可以使用状态机模式呢?(状态比较少时都是可以使用状态机模式的)
比如:开灯,关灯。可以使用状态机模式处理
:敌人巡逻,当玩家到了警戒距离时,就会追击玩家,当到达了攻击距离就会攻击敌人。
巡逻-----追击----攻击—巡逻
代码实现:

//状态控制类
 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( ) );
	    }
	}
	} 

状态机模式的优点:
将状态判断逻辑放在每个状态类里面,可以简化判断的逻辑。
当有新的状态出现时,可以通过添加新的状态类来进行扩展,扩展性好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值