状态模式

Java设计模式之状态模式(State模式)介绍 主要介绍了Java设计模式之状态模式(State模式)介绍,本文讲解了何时使用状态模式、如何使用状态模式等内容,需要的朋友可以参考下 立即下载

状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象

介绍

意图:

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

主要解决:

  • 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为

何时使用:

  • 代码中包含大量与对象状态有关的条件语句

如何解决:

  • 将各种具体的状态类抽象出来

关键代码:

  • 通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if…else 等条件选择语句

应用实例:

优点:

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

缺点:

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

使用场景:

  • 行为随状态改变而改变的场景
  • 条件、分支语句的代替者

注意事项:

  • 在行为受状态约束的时候使用状态模式,而且状态不超过 5 个

实现

我们将创建一个 State 接口和实现了 State 接口的实体状态类。Context 是一个带有某个状态的类。StatePatternDemo,我们的演示类使用 Context 和状态对象来演示 Context 在状态改变时的行为变化
在这里插入图片描述

  1. 创建一个接口
    //State.java
    public interface State {
       public void doAction(Context context);
    }
  1. 创建实现接口的实体类
    //StartState.java
    public class StartState implements State {

       public void doAction(Context context) {
          System.out.println("Player is in start state");
          context.setState(this);
       }

       public String toString(){
          return "Start State";
       }
    }

    //StopState.java
    public class StopState implements State {

       public void doAction(Context context) {
          System.out.println("Player is in stop state");
          context.setState(this);
       }

       public String toString(){
          return "Stop State";
       }
    }
  1. 创建 Context 类
    //Context.java
    public class Context {
       private State state;

       public Context(){
          state = null;
       }

       public void setState(State state){
          this.state = state;
       }

       public State getState(){
          return state;
       }
    }
  1. 使用 Context 来查看当状态 State 改变时的行为变化
    //StatePatternDemo.java
    public class StatePatternDemo {
       public static void main(String[] args) {
          Context context = new Context();

          StartState startState = new StartState();
          startState.doAction(context);

          System.out.println(context.getState().toString());

          StopState stopState = new StopState();
          stopState.doAction(context);

          System.out.println(context.getState().toString());
       }
    }
win11一直弹出用户账户控制怎么解决 用户帐户控制简称UAC,是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。近期有部分Win11用户想要关闭UAC,但是不知道应该如何操作,对此下面我就教给大家操作方法,大家可以去尝试看看。... 阅读详情

相关推荐

LTE 中设置voice/data centric的差异

1. 什么是voice centric和data centric Voice centric和data centric的差别在于以语音为中心还是以数据为中心。这里的以某某为中心可不是说说而已。举个栗子,UE一般搜网注册都会按照LUG(LTE->UMTS->GSM)或者LC(LTE->CDMA)的顺序进行,如果UE(未开通VOLTE)注册到LTE时,网络提示不支持语音,比如CSFB。UE就必须disable LTE后回到GU或者CDMA,否则留在不能语音的网络下,UE就会...

alimingh的博客 5235

设计模式笔记二十一:状态模式

状态模式(State Pattern)

积跬步 至千里 452

两层板如何做阻抗控制呢

两层板如何做阻抗控制呢? 这个问题可能很多人都会碰到,有的人在此等需要做阻抗控制的情况都选择做多层板。诚然,多层板在阻抗控制,EMC等等方面都有着天然的优势。然而,在价格上和周期上,两层板就有着绝对优势了。 对于成本非常敏感而又不是太复杂的产品,尽管对于我们硬件工程师而言,有一堆的理由要求使用多层板。然而在面对毛都不懂的老板“别人能做,你为什么不能做?”这个问题时只得低下我们高傲的头颅。 好...

weixin_42005993的博客 2万+

Java设计模式之状态模式

状态模式(State):对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 2. 抽象状态角色 3. 具体状态角色 4. 客户端角色

本人是个小小程序员,此博客一是为了激励自己学习,二是为了记录自己的学习历程,三是为了能够及时回顾相关知识。 990

VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

[课程学习] VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

夏风喃喃的博客 1605

基于本地知识库的智能问答系统架构

智能问答系统的核心可以分为4部分。1)知识库构建。2)检索。3)后处理。4)推理。知识库构建:知识库中可以包含多个向量数据库和知识图谱等,核心是怎么建立索引,使得检索时能够将与问题相关的知识给检索出来。检索:从知识库中的多个库或者知识图谱中检索出与问题相关的信息。后处理:从知识库中检索出来的信息可能是冗余的,而且可能不符合我们希望的格式要求,因此,我们需要对这些数据进行过滤,格式化等操作。推理: 基于检索出来的知识进行推理,让输出能够回答用户的问题,目前主要使用大模型进行推理。

qq_44993593的博客 1713

java设计模式二十二(策略模式)

java设计模式—策略模式 一.概述 策略模式跟状态模式非常相似,唯一不同的是,策略模式中的Context要感知状态的变化,并且调用State的功能方法,而状态模式对具体的功能需要自己去执行,下面我们将状态模式略做修改就是策略模式。 二.应用场景 1.替代if-else或switch-case 三.模式示例: 1.创建状态接口 public interface Sta...

我的博客 250

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1610

状态模式(StatePattern)

状态模式

明明明的博客 1249

ComfyUI破限版全中文AI绘画环境搭建与工作流实战指南

节点式工作流是AI绘画领域的核心技术架构,通过将图像生成过程拆分为可配置的模块化节点,实现了对Stable Diffusion模型的精细化控制。其技术原理基于数据流编程范式,每个节点负责特定功能处理,如文本编码、采样器配置和VAE解码等。这种设计在工程实践中的核心价值在于提供了可追溯、可复用的可视化工作流,特别适合需要参数调优和批量生产的商业场景。ComfyUI作为典型的节点式AI绘画工具,在破限版中针对中文用户优化了界面支持和显卡兼容性,显著降低了技术门槛。在实际应用中,结合ControlNet和LoRA

weixin_29038155的博客 452

模型泛化能力提升:领域自适应与迁移学习

模型泛化能力提升:领域自适应与迁移学习​ ,人工智能,计算机视觉,大模型,AI,在机器学习和深度学习的应用中,模型的泛化能力是一个关键问题。泛化能力指的是模型在新的、未见过的数据上表现良好的能力。然而,实际情况中,训练数据和测试数据往往来自不同的领域,存在分布差异,这会导致模型的泛化能力下降。领域自适应与迁移学习正是为了解决这一问题而发展起来的重要技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

【设计模式二十三之状态StatePattern模式】状态模式StatePattern

解释器模式细说解释器模式细说解释器模式定义UML模型基于UML的代码场景一场景代码场景二场景代码解释器模式应用和注意事项 细说解释器模式 提示: 博主:章飞 _906285288的博客 博客地址:http://blog.youkuaiyun.com/qq_29924041 细说解释器模式 定义 UML模型 基于UML的代码 场景一 场景 代码 场景二 场景 代码 解释器模式应用和注意事项 欢迎继续...

章飞 _906285288的博客 888

7.12真题华为OD机试真题 新系统 - 字符串压缩编码 (Java/Py/C/C++/Js/Go)

7.12真题华为OD机试真题 新系统 - 字符串压缩编码 (Java/Py/C/C++/Js/Go)

算法大师! 844

状态模式(StatePattern)

文章目录状态模式(StatePattern)模式动机模式定义模式结构模式分析在状态模式结构中需要理解环境类与抽象状态类的作用模式实例模式优点模式缺点模式应用模式拓展共享状态简单状态模式与可切换状态的状态模式总结 状态模式(StatePattern) 状态模式 当一个对象的内在状态在状态改变时允许改变其行为,这个对象看起来像是改变了其类 状态模式主要解决的是当控制一个对象状态转化的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 状态模式的好处是将于特定

Sharker_Blog的博客 373

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java状态模式

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

walkerwqp的博客 667

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

设计模式之状态模式(一)

优点清晰的结构和逻辑:状态机模式使得对象的行为与其状态紧密相关,使得代码结构更加清晰,逻辑更加明确。每个状态及其转换都被明确地定义和封装,使得程序易于理解和维护。扩展性好:当需要添加新的状态或修改现有状态的行为时,只需要添加新的状态类或者修改现有状态类的实现,而不需要修改上下文或其他状态类的代码。这降低了代码的耦合度,提高了系统的可扩展性。减少条件分支:状态机模式通过将状态转换逻辑封装在状态类中,减少了在上下文中使用大量的条件分支(如if-else或switch-case)的情况。

红军不怕远征难,万水千山只等闲 1508

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

重温设计模式之状态模式

状态模式 State Pattern 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 在生产流水线上,每个岗位的工人完成自己的步骤后,产品状态发生变化,工人会交给下一环节处理。 如果用代码来描述一条披萨生产流水线,可以用状态模式。Pizza类为Context角色,它封装了客户端感兴趣的处理和查看状态接口,并将与状态相关的操作委托给当前状态对象(Cook)来处理。 ...

分享知识、分享进步 316

状态模式 StatePattern

状态接口interface IState { void Do(); void UnDo(); } 状态Ausing System; class AskPay : IState { private CustCommodityAuditing _CCA; public AskPay(CustCommodityAuditing cca) {

GhostHouse 1622

js设计模式之(状态模式)

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

vv_bug 760

状态模式(State Pattern)

    状态模式,又称状态对象模式,状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 示例: 1、结构     状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式的示意性类图如下图...

qq_26880671的博客 196

设计模式之状态模式

设计模式是经验总结,是学习软件设计的有效方法,因此,了解和理解现有的设计模式,是提高软件设计的有效途径之一,这里将介绍相关的设计模式,并通过示例了理解其用法。本章主要介绍状态模式并进行示例。

ZhangCurie的博客 336
上一篇: 观察者模式
下一篇: 空对象模式
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值