(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函数里面。当你需要增加新的状态的时候十分方便添加。 这个模式首先把每一状态都分开了,互不干扰,其次它们在状态转换的时候也没有用到大量的分支语句,减少了增减功能时意外的发生。 当一个对象的行为取决与它的状态,并且它必须在运行时刻根据状态的改变改变它的行为时,就可以考虑使用状态模式。(摘抄)
';