目录

文章目录

  • 目录
  • 状态模式
  • 应用场景
  • 代码示例

状态模式

状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。

优点

  • 封装了状态转换规则。
  • 枚举了可能的状态,在枚举状态之前需要确定状态的种类。
  • 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
  • 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
  • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

缺点

  • 状态模式的使用必然会增加系统类和对象的个数。
  • 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
  • 状态模式对 “开闭原则” 并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

应用场景

  • 行为随状态改变而改变的场

设计模式 — 行为型模式 — 状态模式相关推荐

  1. Java设计模式之行为型:状态模式

    背景: 介绍状态模式前,我们先看这样一个实例:公司力排万难终于获得某个酒店的系统开发项目,并且最终落到了你的头上.下图是他们系统的主要工作: 当第一眼看到这个系统时你就看出这是一个状态图,每个框都代表 ...

  2. 《设计模式详解》行为型模式 - 状态模式

    状态模式 6.5 状态模式 6.5.1 反例 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 行为型 ...

  3. 行为型模式——状态模式(十一)

    该项目源码地址:https://github.com/ggb2312/JavaNotes/tree/master/design-pattern(设计模式相关代码与笔记) 1. 定义 允许一个对象在其内 ...

  4. 设计模式之禅【状态模式】

    真刀实枪之状态模式 从电梯说起 随着城市的发展,有两样东西的发明在城市的发展中起到非常重要的作用 汽车:横向发展 电梯:纵向发展 既然说电梯,那就看看电梯有哪些动作 开门 关门 运行 停止 好了,动作 ...

  5. 【设计模式系列19】状态模式原理分析及其和策略模式,责任链模式的区别

    状态模式原理分析 设计模式系列总览 前言 什么是状态模式 状态模式示例 状态模式角色 状态模式与责任链模式 状态模式与策略模式 状态模式应用场景 状态模式优缺点 总结 设计模式系列总览 设计模式 飞机 ...

  6. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  7. 设计模式的理解:状态模式(State) 和备忘录模式(Memento)

    一.状态模式 状态模式,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.它的实现方式和策略模式相似,目的都是对if...else语句进行优化,只不过,策略模式通过外部传入枚举.条 ...

  8. 设计模式21:State 状态模式(行为型模式)

    State 状态模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态的行为就可能完全不同. ...

  9. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

最新文章

  1. Blend_ControlTemplate(Z)
  2. 【leetcode】486. Predict the Winner
  3. Linux之wget下载
  4. 最近的生活 - 18年03月20日
  5. jquery mobile页面切换效果(Flip toggle switch)(注:jQuery移动使用的数据属性的列表。 )...
  6. HTTP/2 学习笔记
  7. ES6_类_note
  8. restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
  9. 概率图模型(PGM)学习笔记(一)动机与概述
  10. Spring Cloud Alibaba Sentinel之持久化篇
  11. 如何在Windows下像Mac一样优雅开发
  12. foobox 4.2(foobar2000 CUI配置)
  13. 微信小程序弹窗禁止页面滚动
  14. 广州高清卫星地图 用百度卫星地图server下载 含标签、道路数据叠加 可商用
  15. 银行硬件维护维修工单小程序开发制作
  16. 虚拟机由于找不到msvcr120dll_计算机提示丢失msvcr120.dll文件怎么办?
  17. Spring Boot框架入门到进阶教程(自学版)
  18. 使用mmdetection训练自己的coco数据集(免费分享自制数据集文件)
  19. 计算机一级是word2010,WORD2010讲义计算机一级
  20. 电脑怎么用计算机打开指令,快速打开电脑上的计算器

热门文章

  1. C什么k什么_G、D、C、Z、T、K、L、Y,这些字母和火车级别有什么关系
  2. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...
  3. test1---peersim 0
  4. 自由意志是否受机器控制?
  5. Swift团队把Swift之父气跑了,网友:Python之父的仁慈独裁者模式才是王道
  6. 12岁女孩零编程经验开发系统千人用,80岁初代程序员300多天打卡学AI
  7. MIT开发AI新工具,替设计师“省材料钱”:支持实时预览、兼容CAD软件丨开源...
  8. 自动驾驶年度激辩:载货比载人更快,商业化应成为评价指标 | MEET2021
  9. 专访阿里达摩院聂再清:不能让每个人无差别享受AI,是程序员的耻辱
  10. 全球最大AI商业展会开幕,这家老牌巨头担当中国唯一代表