您的位置:首页 > 其它

状态模式

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

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

/**

* 定义状态的接口,包含状态的抽象方法

* @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();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: