状态模式

  • 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. 封装了状态的变化过程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 实现在线投票## 考虑一个在线投票的应用,要实现控制同一个用户只能投一票,如果一个用户反复...
    七寸知架构阅读 1,969评论 7 53
  • 目录 本文的结构如下: 引言 什么是状态模式 模式的结构 典型代码 代码示例 状态模式和策略模式的区别 优点和缺点...
    w1992wishes阅读 783评论 0 6
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 凌晨给薄荷浇水 舍友养的茉莉花开了 好香 四点多起床 给朋友送行 继续睡了
    你好呀自由阅读 121评论 0 0
  • 生活从来不会辜负一个眼里充满期待的行者,他会让你变得愈加浓烈,愈加厚重。时隔经年,才发现自己所做的努力...
    calmlyleave阅读 329评论 0 1