(16)无尽加班何时休息——状态模式

状态模式

当一个对象的内在状态改变时允许其改变其行为,这个对象看起来像是改变了其类。(摘抄)

状态模式主要用于解决状态转换过程中代码过于复杂。把状态的判断逻辑放到用于表示状态的一系列类中去实现。这样就可以把复杂的逻辑判断给省略。

public class Worker
{
	public State state;
	
	public Worker(State state)
	{
		this.state = state;
	}
	
	public void Request()
	{
		state.handler(this);
	}
}

public abstract class State
{
	public abstract void handler(Worker worker);
}

public class ConcreteStateA extends State
{

	@Override
	public void handler(Worker worker) {
		// TODO Auto-generated method stub
		worker.state = new ConcreteStateB();
	}
	
}

public class ConcreteStateB extends State
{

	@Override
	public void handler(Worker worker) {
		// TODO Auto-generated method stub
		worker.state = new ConcreteStateA();
	}
	
}

class Client
{
	public static void main()
	{
		Worker worker = new Worker(new ConcreteStateA());
		
		worker.Request();
	}
}

基本的实现代码就是上面这样了,这个模式相当于把所有与状态转换相关的代码都放到了State类子类的handler函数里面。当你需要增加新的状态的时候十分方便添加。

这个模式首先把每一状态都分开了,互不干扰,其次它们在状态转换的时候也没有用到大量的分支语句,减少了增减功能时意外的发生。

当一个对象的行为取决与它的状态,并且它必须在运行时刻根据状态的改变改变它的行为时,就可以考虑使用状态模式。(摘抄)

文章导航