java state形式

java state模式
1.静态主调函数

package com;
public class Test {  
	public static void main(String[] args)
	{	   
		State state = new StateA();
		StateManager sm = new StateManager(state);
		for(int i=0;i<4;i++)
		{
			state = sm.nextState();
			System.out.print(":"+state);
			if(state == null)
			{
				System.out.print("-->");
			}
			sm.nextStep();
		}
	}
}

2.State接口类

package com;

public interface State
{
	public void lastStep(StateManager s);
	public void nextStep(StateManager s);

}

3.状态管理类

package com;

public class StateManager 
{

	private State state;

	public StateManager(State initState)
	{
		this.state = initState;
	}

	public void setState(State state)
	{
		this.state = state;
	}

	//下一步
	public void nextStep()
	{
		if(this.state != null)
			this.state.nextStep(this);
	}

	//上一步
	public void lastStep()
	{
		if(this.state != null)
			this.state.lastStep(this);
	}

	//返回下一个状态
	public State nextState()
	{
		return this.state;
	}
}

4.状态类

package com;

public class StateA implements State
{
	public void lastStep(StateManager s)
	{
		s.setState(new StateC());
	}

	public void nextStep(StateManager s)
	{    
		s.setState(new StateB());
	}

	public String toString() 
	{
		return "State A";
	}
}

package com;

public class StateB implements State
{
	public void lastStep(StateManager s)
	{
		s.setState(new StateA());
	}
	
	public void nextStep(StateManager s)
	{
		s.setState(new StateC());
	}
   
	public String toString()
	{
		return "State B";
	}
}

package com;
public class StateC implements State
{
	public void lastStep(StateManager s) 
	{  
		s.setState(new StateB());
	}
	public void nextStep(StateManager s)
	{
		s.setState(new StateA());
	}
	
	public String toString() 
	{
		return "State C";
	}
}

  4. 总结:

    (1) 采用interface实现多继承,加入管理类,方便状态切换

    (2)应用场景:

         1、不同的状态(可能会对应相应的行为),

         2、不同的行为;  间反复进行切换,则应优先考虑状态模式。