• State
  • 状态便于扩展, 方法不便扩展。如果相反用switch
    • public class MM {
          MMState state;
          public void smile(){
              state.smile();
          }
      }
      public abstract class MMState {
          abstract void smile();
      }
      public class MMHappyState extends MMState {
          @Override
          void smile(){}
      }
  • FSM例子,线程状态
    • public class Thread_ {
          ThreadState_ state;
          void move(Action a) { state.move(a);}
      }
      abstract class ThreadState_ {
          abstract void move(Action a);
      }
      public class NewState extends ThreadState_ {
          private Thread_ t;
          @Override
          void move(Action a) {
              if ("start".equals(a.msg)) {
                  t.state = new RunningState(t);
              }
          }
      }
      public class Action {
          String msg;
      }