设计模式 — 行为型模式 — 状态模式
目录
文章目录
- 目录
- 状态模式
- 应用场景
- 代码示例
状态模式
状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。
优点:
- 封装了状态转换规则。
- 枚举了可能的状态,在枚举状态之前需要确定状态的种类。
- 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
- 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
- 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
缺点:
- 状态模式的使用必然会增加系统类和对象的个数。
- 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
- 状态模式对 “开闭原则” 并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。
应用场景
- 行为随状态改变而改变的场
设计模式 — 行为型模式 — 状态模式相关推荐
- Java设计模式之行为型:状态模式
背景: 介绍状态模式前,我们先看这样一个实例:公司力排万难终于获得某个酒店的系统开发项目,并且最终落到了你的头上.下图是他们系统的主要工作: 当第一眼看到这个系统时你就看出这是一个状态图,每个框都代表 ...
- 《设计模式详解》行为型模式 - 状态模式
状态模式 6.5 状态模式 6.5.1 反例 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 行为型 ...
- 行为型模式——状态模式(十一)
该项目源码地址:https://github.com/ggb2312/JavaNotes/tree/master/design-pattern(设计模式相关代码与笔记) 1. 定义 允许一个对象在其内 ...
- 设计模式之禅【状态模式】
真刀实枪之状态模式 从电梯说起 随着城市的发展,有两样东西的发明在城市的发展中起到非常重要的作用 汽车:横向发展 电梯:纵向发展 既然说电梯,那就看看电梯有哪些动作 开门 关门 运行 停止 好了,动作 ...
- 【设计模式系列19】状态模式原理分析及其和策略模式,责任链模式的区别
状态模式原理分析 设计模式系列总览 前言 什么是状态模式 状态模式示例 状态模式角色 状态模式与责任链模式 状态模式与策略模式 状态模式应用场景 状态模式优缺点 总结 设计模式系列总览 设计模式 飞机 ...
- 设计模式(创建型)之建造者模式(Builder Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 设计模式的理解:状态模式(State) 和备忘录模式(Memento)
一.状态模式 状态模式,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.它的实现方式和策略模式相似,目的都是对if...else语句进行优化,只不过,策略模式通过外部传入枚举.条 ...
- 设计模式21:State 状态模式(行为型模式)
State 状态模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态的行为就可能完全不同. ...
- Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)
Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...
最新文章
- Blend_ControlTemplate(Z)
- 【leetcode】486. Predict the Winner
- Linux之wget下载
- 最近的生活 - 18年03月20日
- jquery mobile页面切换效果(Flip toggle switch)(注:jQuery移动使用的数据属性的列表。 )...
- HTTP/2 学习笔记
- ES6_类_note
- restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
- 概率图模型(PGM)学习笔记(一)动机与概述
- Spring Cloud Alibaba Sentinel之持久化篇
- 如何在Windows下像Mac一样优雅开发
- foobox 4.2(foobar2000 CUI配置)
- 微信小程序弹窗禁止页面滚动
- 广州高清卫星地图 用百度卫星地图server下载 含标签、道路数据叠加 可商用
- 银行硬件维护维修工单小程序开发制作
- 虚拟机由于找不到msvcr120dll_计算机提示丢失msvcr120.dll文件怎么办?
- Spring Boot框架入门到进阶教程(自学版)
- 使用mmdetection训练自己的coco数据集(免费分享自制数据集文件)
- 计算机一级是word2010,WORD2010讲义计算机一级
- 电脑怎么用计算机打开指令,快速打开电脑上的计算器
热门文章
- C什么k什么_G、D、C、Z、T、K、L、Y,这些字母和火车级别有什么关系
- JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...
- test1---peersim 0
- 自由意志是否受机器控制?
- Swift团队把Swift之父气跑了,网友:Python之父的仁慈独裁者模式才是王道
- 12岁女孩零编程经验开发系统千人用,80岁初代程序员300多天打卡学AI
- MIT开发AI新工具,替设计师“省材料钱”:支持实时预览、兼容CAD软件丨开源...
- 自动驾驶年度激辩:载货比载人更快,商业化应成为评价指标 | MEET2021
- 专访阿里达摩院聂再清:不能让每个人无差别享受AI,是程序员的耻辱
- 全球最大AI商业展会开幕,这家老牌巨头担当中国唯一代表