美文网首页
状态模式

状态模式

作者: 上海马超23 | 来源:发表于2017-06-25 22:39 被阅读0次
    • State 抽象状态角色
      • 依赖环境角色 context
      • handler,handler2 ... hanlerN 多个状态的业务逻辑
    • ConcreteState 具体状态角色,一个类对应一种状态
      • 针对每个状态下,自己的业务逻辑handler
      • 其他的handler方法,先context.setCurrentState切换状态,再调用context.handlerN方法
    • Context 环境角色
      • 多个 new ConcreteState 属性
      • currentState 当前状态属性
      • setCurrentState(currentState) : 更新currentState属性,更新currentState的context属性
      • 对应抽象状态的多个handler方法,委托给currentState对应的handler执行
    context = new Context();
    context.setCurrentState(new ConcreteState1()); // 初始化状态1
    context.handle1();  // 直接调用ConcreteState1.handler1()
    context.handle2(); // 切换到ConcreteState2,调用handler2()。隐藏了状态的变化
    

    总结

    优点

    1. 避免了过多的条件判断,不过相应地状态子类数量会增加
    2. 状态修改只需要修改对应的状态实现子类,增加状态只要增加子类。
    3. 封装了状态的变化过程

    相关文章

      网友评论

          本文标题:状态模式

          本文链接:https://www.haomeiwen.com/subject/eegrcxtx.html