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

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

缺点:

  • 状态多的时候,子类爆炸
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值