设计模式(6)状态模式--行为型

设计模式(行为型)-状态模式 状态模式允许一个对象在其内部状态改变时改变它的行为,从外部看来,对象仿佛修改了它的类。它是行为型设计模式的杰出代表,通过将对象的状态封装在不同的状态类中,使得对象的行为能够根据当前状态动态调整。例如,在一个游戏角色系统中,角色可能处于正常、奔跑、跳跃、受伤等多种状态。当角色从正常状态切换到奔跑状态时,其移动速度、动画表现等行为都会随之改变,这正是状态模式的生动体现。状态模式与策略模式堪称 “亲兄弟”,但二者存在关键区别:策略模式着重于让对象在运行时选择不同的策略来执行特定功能; 阅读详情

定义

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

角色

Context: 环境类。可以包括一些内部状态。
State: 抽象状态类。State定义了一个所有具体状态的共同接口,任何状态都实现这个相同的接口,这样一来,状态之间就可以互相转换了。
ConcreteState: 具体状态类。具体状态类,用于处理来自Context的请求,每一个ConcreteState都提供了它对自己请求的实现,所以,当Context改变状态时行为也会跟着改变

适用场景

1、对象的行为依赖于它的状态(属性)并且可以根据它的状态改变而改变它的相关行为。
2、代码中包含大量与对象状态有关的条件语句

类图

这里写图片描述

示例

糖果机的处理

引申

模板方法模式:有子类决定如何实现算法中的某些步骤
状态模式:封装基于状态的行为,并将行为委托到当前状态
策略模式:将可以互换的行为封装其来,然后使用委托的方法,决定使用哪一个行为

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题 本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。 阅读详情

相关推荐

树莓派5搭建ROS1开发环境:从系统安装到环境变量配置

本文详细指导如何在树莓派5上搭建ROS1开发环境。针对树莓派OS非标准安装路径导致的常见CMake报错问题,提供了从系统烧录、一键安装ROS到关键环境变量配置的完整解决方案,确保工作空间能成功编译,助力机器人项目开发。

weixin_29159127的博客 385

【设计模式-4.6】行为型——状态模式

状态模式(State Pattern)也叫作状态机模式(State Machine Pattern),允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类,属于行为型设计模式。(引自《设计模式就该这样学》P348)“对象看起来好像修改了它的类”,指对象的状态发生改变后,与之对应的行为也会发生改变(当然,这取决于你的业务逻辑)。状态模式中类的行为是由状态决定的,在不同的状态下有不同的行为。其意图是让一个对象在其内部改变的时候,行为也随之改变。

小何的博客 1701

ADS高级技巧:用DAC控件实现多变量参数扫描(以S参数和阻抗匹配为例)

本文深入解析了ADS软件中DAC控件的高级应用,指导用户如何利用其实现多变量参数扫描。通过构建支持多变量的MDF文件,并将其与原理图变量动态映射,可以高效完成如S参数和阻抗匹配等复杂场景的联合仿真与可视化分析,显著提升射频电路设计的效率和深度。

3a9bq4r8t2y的博客 254

【Java设计模式】六、6.5 行为型模式——状态模式

6.5 状态模式 6.5.1 概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。 类图如下: 代码如下: public interface ILift { //电梯的4个状态 //开门状态 public final static int OPENING_STATE = 1; //关门状

Ep流苏的博客 248

内网环境下的高德地图离线化实战:从瓦片下载到交互功能集成

本文详细介绍了在内网环境中部署离线高德地图的完整实战方案。针对军工、能源、金融等对网络隔离与数据安全有严格要求的场景,文章核心解决了离线地图的两大基石:地图瓦片数据的高效下载与本地化,以及高德地图JS API的获取与插件集成。通过具体代码示例,进一步讲解了如何实现地图初始化、海量点标注与聚合、自定义图标及框选查询等核心交互功能,并分享了内网部署的路径配置、性能优化及法律合规等关键注意事项,为开发者在封闭网络环境下构建稳定、可控的地图应用提供了清晰指南。

Apple的专栏 395

为什么你的PROFINET IRT同步性能不达标?等时模式常见配置误区盘点

本文深入剖析了PROFINET IRT等时模式同步性能不达标的常见原因。文章直击痛点,系统盘点了从硬件兼容性、拓扑组态、过程映像分区分配,到同步OB配置、时序参数调校及带宽管理等关键环节的配置误区,并提供了实用的诊断思路与性能优化清单,帮助工程师精准定位并解决同步抖动、时序混乱等难题。

ujm5678901的博客 457

设计模式入门(4) 11种行为型模式之前6种(模板方法模式、策略模式、命令模式、责任链模式、状态模式、观察者模式)

【时间】2021.11.08 【题目】设计模式入门(4) 11种行为型模式之前6种(模板方法模式、策略模式、命令模式、责任链模式、状态模式、观察者模式) 一、引言 本文是视频教程【设计模式详解】的11种行为型模式之前6种(模板方法模式、策略模式、命令模式、责任链模式、状态模式、观察者模式)部分的思维导图。 11种行为型模式之前6种 一句话理解: 模板方法模式:定义模板方法,父类提供模板方法指定各个步骤的执行顺序等,而步骤的具体实现延迟到子类中实现,如InputStream的read()方法定..

小C的博客 340

Qt C++:跨平台开发利器

摘要: Qt C++是基于C++的跨平台开发框架,通过元对象系统、信号槽机制及模块化架构实现"一次编写,多端部署"。核心特性包括: 跨平台能力:覆盖桌面(Windows/macOS/Linux)、移动端(iOS/Android)、嵌入式及WebAssembly; 信号与槽:替代传统回调,实现对象间高效通信; UI组件库:200+预制组件支持QSS样式定制; 工具链:Qt Creator集成开发环境提供可视化设计、调试及多平台编译。 广泛应用于工业控制、车载系统、医疗设备及跨平台应用开发,

2202_75382767的博客 1683

JavaScript设计模式读书笔记(三)=> 行为型设计模式

javascript设计模式读书笔记 模板方法模式 父类定义一组操作骨架,而将一些实现步骤推迟到子类中。 这节自己没有想到很好用到生产中的例子 // e.g. const Alert = function (data) { this.content = data.content; this.panel = document.createElement('div'); this.pane...

翾的博客 861

《科研伦理与学术规范》期末考试答案2023

26单选(2 分)某学术杂志的评稿人同时是某高校相关专业的硕士生导师,在评判一个稿件的时候,他发现该作者研究的题目很有价值, 他便一边压下这个稿子,一边将稿子的纲要传给自己门下的硕士生, 指导他们使用这个题目独立写出一篇论文,并帮助他们发表在其他期 刊上。D.要善待实验动物,是指在饲养管理和使用实验动物过程中,要采取有效措施,使实验动物免遭不必要的伤害、饥渴、不适、惊恐、折磨、疾病和疼痛,保证动物能够实现自然行为,受到良好的管理与照料,为其提供清洁、舒适的生活环境。张某在压力之下不得不屈从。

Glenseeds的博客 4万+

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8817

es6仿java_浅谈设计模式之【状态模式】| Java,ES6语法

【状态模式】在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何时使用:代码中包...

weixin_42414213的博客 190

RK3588芯片CAN总线调试秘籍:SocketCAN与错误帧攻略

RK3588芯片在嵌入式领域凭借8nm工艺和强大性能成为核心控制器。本文详细介绍了其CAN总线配置流程,包括硬件连接、内核驱动配置及SocketCAN命令操作,并深入解析了CAN通信中的错误帧机制及分析方法。通过智能工厂案例,展示了从问题定位到解决方案的全过程,强调了稳定通信对工业应用的重要性。文章为RK3588的CAN总线应用提供了实用技术参考,并对未来智能诊断技术在该领域的应用进行了展望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 518

【设计模式精讲】行为型模式之状态模式

自然界很多事物都有多种状态,而且不同状态下会具有不同的行为,这些状态在特定条件下还会发生相互转换,比如水在软件系统中,有些对象也像水一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同状态下也将具有不同的行为.状态模式(state pattern)的定义: 允许一个对象在其内部状态改变时改变它的行为. 对象看起来似乎修改了它的类.状态模式。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式(十七):行为型之状态模式

电梯不同状态下操作的例子一个电梯有开门状态,关门状态,停止状态,运行状态每一种状态改变,都有可能要根据其他状态来更新处理例如:如果电梯门现在处于运行时状态,就不能进行开门操作而如果电梯门是停止状态,就可以执行开门操作类图如下://电梯的4个状态 //开门状态 public final static int OPENING_STATE = 1;//关门状态 public final static int CLOSING_STATE = 2;

从基础到源码解析的学习记录 1979

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

设计模式--状态模式【行为型模式】

状态设计模式(State Design Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为,这个模式将状态封装成独立的类,并将行为的实现委托给当前状态对象,使得对象的行为可以随着状态的变化而动态改变,也就是状态和行为分离。

weixin_42118323的博客 1270

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Java 设计模式】行为型之状态模式

状态模式是一种行为型设计模式,用于通过将对象的行为封装到不同的状态类中,使得对象在不同的状态下具有不同的行为。状态模式允许对象在内部状态发生改变时改变其行为,而无需修改其代码。状态模式通常包含三个主要角色:上下文(Context)、抽象状态(Abstract State)和具体状态(Concrete State)。定义了一个接口,用于维护一个当前状态的引用,并提供一个用于切换状态的方法定义了一个接口,用于封装与上下文相关的一个或多个行为实现了抽象状态的接口,负责处理与状态相关的行为。

好久不见的流星 2113

行为型模式-状态模式

状态模式是一种行为型设计模式,它允许对象在内部状态改变时改变其行为。状态模式将对象的行为封装在不同的状态类中,对象根据其当前状态决定采取的行动。在状态模式中,通常有三个主要角色:上下文(Context),抽象状态(Abstract State)和具体状态(Concrete State)。上下文(Context)是包含状态的对象,它可以根据其当前状态来执行相应的行为。上下文可以将请求委派给具体状态对象,同时也可以在状态之间切换。

Flying_Fish_roe的博客 1048

Java设计模式之状态模式详解

本文详细介绍了Java设计模式中的状态模式,该模式允许对象在内部状态变化时改变行为,避免了大量条件判断语句。文章通过Mermaid类图展示了状态模式的结构,包含Context、State接口和具体状态类之间的关系。并以自动售货机为例,提供了完整的Java代码实现,包括四种状态(无硬币、有硬币、售出商品、无商品)的具体处理逻辑和状态切换机制。状态模式使代码更清晰易维护,特别适用于对象行为依赖于状态的场景。

季鸢的博客 2493

【设计模式系列】行为型之状态模式

概念 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式是一种对象行为型模式。大家着重理解对象,多种状态 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。 状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论

增量星球 2733

设计模式行为型模式之状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 介绍 意图 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 主要解决 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 何时使用 代码中...

u011675274的专栏 219

C++设计模式之行为型模式:状态模式(State)

状态模式是一种行为型设计模式,允许对象在内部状态改变时改变其行为,使对象看起来像修改了自身类。该模式通过将状态封装为独立类,将行为委托给当前状态,实现状态与行为的解耦。典型应用如订单系统(待支付、已支付等状态),通过环境类(Context)维护当前状态引用,抽象状态(State)定义接口,具体状态(ConcreteState)实现特定行为。状态模式避免了大量条件判断,使状态转换清晰可控,适用于复杂状态流转场景。示例代码展示了订单状态流转的实现,体现了"状态决定行为"的核心思想。

bkspiderx的博客 1107

Java 设计模式系列:行为型-状态模式

状态模式(State Pattern)是一种行为型设计模式,允许一个对象在其内部状态改变时改变其行为。状态模式中类的行为是由状态决定的,在不同的状态下有不同的行为。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。适用场景:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为;一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

程序人生 1370

Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】

设计模式是指在软件开发中为解决常见问题而总结出的一套可复用的解决方案。这些模式是经过长期实践证明有效的编程经验总结,并可以在不同的项目中复用。设计模式并不是代码片段,而是对常见问题的抽象解决方案,它提供了代码结构和模块间交互的一种设计思路,帮助开发者解决特定的设计问题。设计模式的特点:通用性:设计模式针对的是软件开发中常见的设计问题,适用于各种软件工程项目。可复用性:设计模式可以在不同项目和环境下被重复使用,提高代码的可维护性和扩展性。可扩展性:设计模式有助于让代码结构更加灵活,易于扩展和修改。

仙魁XAN 1874

零基础设计模式——行为型模式 - 状态模式

状态模式是一种强大的行为设计模式,它通过将与特定状态相关的行为局部化,并将这些行为委托给代表当前状态的对象,从而使得对象在内部状态改变时能够改变其行为。这不仅消除了大量的条件判断语句,使得代码更加清晰和易于维护,还使得添加新的状态和转换变得更加容易。当你发现一个对象的行为高度依赖于其内部状态,并且这些状态和转换可以用清晰的界限划分时,状态模式会是一个非常好的选择。

qqxhb 资源共享 1187

【设计模式】行为型-状态模式

在变幻的时光中,状态如诗篇般细腻流转。

DC1020的博客 914
上一篇: 数字签名和数字证书是什么
下一篇: 设计模式(7)模板模式--行为型
gycool21
博客等级 码龄17年 10粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值