设计模式——行为型模式_状态模式

1. 类图

状态模式的 UML 图

2. 代码

  • State相关
    • 接口
      • public interface State {
           public void doAction(Context context);
        }
    • 实现类:此处定义Start和Stop两个状态
      • public class StartState implements State {
         
           public void doAction(Context context) {
              System.out.println("Player is in start state");
              context.setState(this); 
           }
         
           public String toString(){
              return "Start State";
           }
        }
        
        public class StopState implements State {
         
           public void doAction(Context context) {
              System.out.println("Player is in stop state");
              context.setState(this); 
           }
         
           public String toString(){
              return "Stop State";
           }
        }
  • Context相关
    • public class Context {
         private State state;
       
         public Context(){
            state = null;
         }
       
         public void setState(State state){
            this.state = state;     
         }
       
         public State getState(){
            return state;
         }
      }
  • 客户端调用
    • public class StatePatternDemo {
         public static void main(String[] args) {
            Context context = new Context();
       
            StartState startState = new StartState();
            startState.doAction(context);    //Player is in start state
       
            System.out.println(context.getState().toString());    //Start State
       
            StopState stopState = new StopState();
            stopState.doAction(context);    //Player is in stop state
       
            System.out.println(context.getState().toString());    //Stop State
         }
      }

3. 总结

优点:

  • 避免了if else的判断
  • 很好的体现了开闭原则和单一职责原则,想要增加状态就增加子类,想要修改状态就修改子类即可
  • 封装性非常好,状态变化放置到了类的内部来实现,外部调用不需要知道类内部如何实现状态和行为的变换

缺点:

  • 状态多的时候,子类爆炸

猜你喜欢

转载自blog.csdn.net/qq_41157876/article/details/111881484