(16)无尽加班何时休息——状态模式
最后更新于:2022-04-01 14:30:38
### 状态模式
当一个对象的内在状态改变时允许其改变其行为,这个对象看起来像是改变了其类。(摘抄)
状态模式主要用于解决状态转换过程中代码过于复杂。把状态的判断逻辑放到用于表示状态的一系列类中去实现。这样就可以把复杂的逻辑判断给省略。
~~~
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函数里面。当你需要增加新的状态的时候十分方便添加。
这个模式首先把每一状态都分开了,互不干扰,其次它们在状态转换的时候也没有用到大量的分支语句,减少了增减功能时意外的发生。
当一个对象的行为取决与它的状态,并且它必须在运行时刻根据状态的改变改变它的行为时,就可以考虑使用状态模式。(摘抄)