状态模式

依据不同的状态,有着不同的行为。状态之间来回切换,如果新增状态,只需要新增新的状态的类就可以了。将不同状态的判断逻辑放在了各个状态类中了。

这里以过马路的红绿灯状态为例子来说明下。

 

/**
 * 定义状态的接口,包含状态的抽象方法
 * @author Administrator
 *
 */
public interface State {
 
 // 下个状态
 public void lastState(StateManager stateManager);
 
 //上个状态
 public void nextState(StateManager  stateManager);
 
 //当前状态
 public void getState();
}

------------------------------------------------------------------------------

/**
 * 红灯状态
 * @author Administrator
 *
 */
public class RedState implements State{

 @Override
 public void lastState(StateManager stateManager) {
  stateManager.setState(new YellowState());
 }

 @Override
 public void nextState(StateManager stateManager) {
  stateManager.setState(new GreenState());
 }

 @Override
 public void getState() {
  System.out.println("当前为红灯状态:停止通行,请等待6s------");
 }
}

--------------------------------------------------------------------------------

/**
 * 绿灯状态
 * @author Administrator
 *
 */
public class GreenState implements State{

 @Override
 public void lastState(StateManager stateManager) {
  stateManager.setState(new RedState());
 }

 @Override
 public void nextState(StateManager stateManager) {
  stateManager.setState(new YellowState());
 }

 @Override
 public void getState() {
  System.out.println("当前为绿灯状态:允许通行,请速度通行3s---");
 }
}

-----------------------------------------------------------------------------------

/**
 * 黄灯状态
 * @author Administrator
 *
 */
public class YellowState implements State{

 @Override
 public void lastState(StateManager stateManager) {
  stateManager.setState(new GreenState());
 }

 @Override
 public void nextState(StateManager stateManager) {
  stateManager.setState(new RedState());
 }

 @Override
 public void getState() {
  System.out.println("当前为黄灯状态:急速通行1s-");
 }
}

-------------------------------------------------------------------------------------

/**
 * 状态的管理类
 * @author Administrator
 *
 */
public class StateManager {
 //初始态为红灯
 private State state = new RedState();
 
 public void setState(State state){
  this.state = state;
 }
 
 public void getState(){
  state.getState();
 }
 
 public void lastState(){
  state.lastState(this);
 }
 
 public void nextState(){
  state.nextState(this);
 }
}

-----------------------------------------------------------------------------------

/**
 * 测试类
 * @author Administrator
 *
 */
public class Test {
 public static void main(String[] args) {
  StateManager stateManager  = new StateManager();
  
  System.out.println("状态模式开启了:------");
  while(true){
   try {
    //红灯
    stateManager.getState();
    Thread.sleep(6000);
    stateManager.nextState();
    
    //绿灯
    stateManager.getState();
    Thread.sleep(3000);
    stateManager.nextState();
    

    //黄灯
    stateManager.getState();
    Thread.sleep(1000);
    stateManager.nextState();
    
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值