JAVA23种设计模式之状态模式

java23种设计模式-状态模式 状态模式是一种行为型设计模式,允许对象在其内部状态改变时改变它的行为。该模式将状态相关的行为封装到独立的对象中,使得对象在不同状态下表现出不同的行为。 阅读详情
  1. 状态模式
    状态模式允许一个对象在其内部状态发送改变时,改变其行为,看上去就像是改变了他的类一样。
    状态模式要求我们把对象的行为放到对象不同的状态中。随着状态的改变对象的行为也随之发生改变。另外重要的一点是,我们研究的对象要持有所有的状态,在状态类中是通过对象来改变其自身的状态的。
  2. 状态模式的示意图
    状态模式
  3. 状态模式包含的角色
    环境角色:持有所有自身所有的状态。而且,该类中也定义了当前对象转换状态的操作。也就是通过这些方法来返回当前对象的具体状态。
    **抽象状态角色:**定义一个接口供所有具体状态实现。里面定义了状态转换的操作方法。也就是一系列动作,例如:酒店需要通过预定或者入住,才能将房间的状态的转变为已预订状态和已入住状态,这里的预定和入住的方法就需要定义在这个抽象角色中,供具体状态角色实现。
    具体状态角色:持有环境角色。 每个具体状态角色都实现了该状态下,环境角色的所有行为。
  4. 状态模式示例代码
    场景:日常生活中餐厅为例,你如果想去吃饭,则需要提前预定,然后前往吃饭,吃完饭付完钱就可以释放当前餐桌。既然预定了,也可以退订。这里涉及到的餐桌状态就有,已预订状态,已占用状态(这里占用指的是现场有人在吃饭!),空闲状态。
    注意:在这里我们要分清楚对象的状态和改变对象状态的操作。
    环境角色: (餐桌)
  public class Table {
    public State bookedState;
    public State freeState;
    public State occupiedState;
    private State state ;
    public Table() {
        bookedState = new BookedState(this);
        freeState = new FreeState(this);
        occupiedState = new OccupiedState(this);
        state = freeState;//初始为空闲
    }
    public void setState(State state) {
        this.state = state;
    }
    /**
     * 预定
     */
    public  void book(){
        state.book();
    }
    /**
     * 退订
     */
    public void Unsubscribe(){
        state.Unsubscribe();
    }
    /**
     * 吃饭
     */
    public void eat(){
        state.eat();
    }
    /**
     * 付钱走人
     */
    public void payMoneyAndLeave(){
        state.payMoneyAndLeave();
    }
}

抽象状态角色:

public interface State {
    /**
     * 预定
     */
    void book();
    /**
     * 退订
     */
    void Unsubscribe();
    /**
     * 吃饭
     */
    void eat();
    /**
     * 付钱走人
     */
    void payMoneyAndLeave();
}

具体状态角色:(各种状态)
空闲状态:

public class FreeState implements State {
    private Table table;
    public FreeState(Table table) {
        this.table = table;
    }
    @Override
    public void book() {
        System.out.println("您已经成功预订了...");
        table.setState(table.bookedState);
    }
    @Override
    public void Unsubscribe() {
    }
    @Override
    public void eat() {
        System.out.println("您已经成功开始等菜...");
        table.setState(table.occupiedState);
    }
    @Override
    public void payMoneyAndLeave() {

    }
}

预定状态:

public class BookedState implements State{
    private Table table;
    public BookedState(Table table) {
        this.table = table;
    }
    @Override
    public void book() {
    }
    @Override
    public void Unsubscribe() {
        System.out.println("您已经成功取消预订了...");
        table.setState(table.freeState);
    }
   @Override
    public void eat() {
        System.out.println("您已经到达餐厅吃饭...");
        table.setState(table.occupiedState);
    }
    @Override
    public void payMoneyAndLeave() {

    }
}

占用状态:(指到现场吃饭)

public class OccupiedState implements State {
    private Table table;
    public OccupiedState(Table table) {
        this.table = table;
    }
    @Override
    public void book() {
    }
    @Override
    public void Unsubscribe() {
        System.out.println("您已经成功取消了预订了...");
        table.setState(table.freeState);
    }
    @Override
    public void eat() {
    }
    @Override
    public void payMoneyAndLeave() {
        System.out.println("您已经付完钱离开...");
        table.setState(table.freeState);
    }
}

测试主函数:

public class Main {
    public static void main(String[] args) {
       Table table =  new Table();
       table.book();
       table.eat();
       table.payMoneyAndLeave();
       System.out.println("----------------------------------");
       table.eat();
       table.payMoneyAndLeave();
    }
}
  1. 状态模式的优缺点
  • 优点:
  • 封装了转换规则。
  • 枚举了对象几乎所有的状态。
  • 将所有与某个状态相关的行为或者是方法放到一个类中,可以很方便的增加新的状态,只需要该表状态的行为即可。
  • 减少了代码中的if…else…的使用。
  • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
  • 缺点:
  • 会增加系统的类和对象的个数。
  • 状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。
  • 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
PJ85718DM+STM32F373RC高精度温度监测系统实战设计 温度测量是工业测控的基础技术,其核心在于模拟信号链的完整性与抗干扰能力。从热电偶、RTD到NTC等传感器输出的微弱模拟信号,需经激励、调理、ADC采样、冷端补偿、非线性校正等多环节处理,才能转化为稳定可靠的数字温度值。高精度Σ-Δ ADC、可编程增益放大器(PGA)、硬件同步采样、分段线性化引擎等关键技术,共同决定了系统在宽温域、强干扰、长期运行场景下的实际性能边界。本文聚焦HVAC等典型工业环境,深入解析PJ85718DM与STM32F373RC协同构建的全链路温度监测方案,涵盖硬件选型逻辑、寄存器级配置 阅读详情

相关推荐

java_250_GOF23设计模式_状态模式_UML状态图_酒店系统房间状态_线程对象状态切换_练习

状态模式state 状态图 类图 //--------------------接口 ------------------- package java_250_GOF23设计模式_状态模式_UML状态图_酒店系统房间状态_线程对象状态切换_练习; /** 接口 类 / public interface State {//State声明 void handle();//handle管理者 } //---------------:房间状态,空闲------------ package java_250_

weixin_45339692的博客 412

Java二十三种设计模式-状态模式(20/23)

(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。状态模式是一种行为型设计模式,允许一个对象在其内部状态改变时改变其行为。对象看起来似乎修改了其类。统一接口:确保所有状态类都遵循统一的状态接口,使得状态转换和行为调用标准化。

小相探索IT世界 1579

WSL2+Docker实战:在Windows上部署MinerU 2.5.3,解锁媲美Demo的VLM PDF解析能力

本文详细介绍了如何在Windows系统上通过WSL2+Docker部署MinerU 2.5.3,实现媲美Demo的VLM PDF解析能力。文章涵盖环境准备、Docker部署实战技巧及高级使用技巧,特别针对PDF识别中的复杂排版、公式和图表处理提供了优化方案,帮助用户高效处理学术论文和技术文档。

weixin_29291573的博客 482

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

无人机通信安全渗透测试:从信号拦截到GPS欺骗的完整攻防框架

在物联网和智能设备普及的背景下,无线通信安全成为关键基础设施防护的核心环节。其原理在于,通过软件定义无线电等设备对空中的射频信号进行捕获、分析与模拟,从而评估通信协议在加密、认证和防重放等方面的脆弱性。这项技术的价值在于,它能主动发现并修复系统设计缺陷,避免因信号被拦截或欺骗导致设备被劫持、数据泄露等重大安全事件。其应用场景广泛,涵盖消费电子、工业控制及关键基础设施等领域。本文聚焦于无人机这一典型移动物联网终端,深入探讨如何构建一套针对其通信链路的渗透测试方法论,其中涉及信号拦截、协议逆向等关键技术,旨在为

weixin_34128237的博客 391

泰克示波器TDS210改装便携示波器

泰克示波器TDS210改装编写示波器

超级网吧的博客 3079

【设计模式】用Java实现状态模式

状态模式是一种行为设计模式,它允许对象在内部状态发生改变时改变其行为。该模式将对象的行为包装在不同的状态类中,使得对象的行为可以根据其当前状态动态改变。状态模式通常由以下几个角色组成:环境类(Context):环境类是拥有状态的对象,它将会根据当前状态来执行相应的行为。它维护了一个对抽象状态类的引用,用于切换和委托不同的状态处理。抽象状态类(State):抽象状态类定义了一个接口,用于具体状态类的实现。在该接口中声明了具体状态类需要实现的方法。具体状态类(Concrete State)

分享Java硬核干货 1万+

DSSAD自动驾驶行车记录系统体系结构和应用

通过对其感知、决策、控制等模块的详细研究,以及对商业化和消费市场发展趋势的分析,为该领域的研究和实践提供有价值的参考。通过克服技术、安全与隐私、法规与政策等方面的挑战,并紧跟人工智能、云端服务、用户体验等发展趋势,DSSAD系统将更好地适应自动驾驶行业的发展,提供更安全、智能、便捷的驾驶辅助服务。DSSAD体系结构通过数据收集模块、加密链接和数据存储模块和数据读取模块等关键模块的协同作用,构建了一个强大而灵活的自动驾驶数据记录系统,为未来智能出行提供了坚实的技术基础。

一只老虎的专栏 2207

Java中23种设计模式

Java中23种设计模式,包括简单介绍,适用场景以及优缺点等

呜呜老司机的博客家园 9万+

微信小程序 - 实现人脸识别对比+人脸相似度数据,用户从相册选择或拍照上传两张图片进行人脸对比得到人脸相似度及判断是否是同一个人,微信小程序检测人脸相似度(免费纯前端方案+调用第三方API接口方案)

微信小程序实现人脸识别对比,微信小程序人脸对比 人脸对比识别 人脸对比相似度,实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,小程序人脸相似度对比,快速识别两张照片的相似程度(用百分比)图片相似度对比在线测试,图片相似度对比,微信小程序人脸相似度对比分析,计算两张人脸的相似度,从而判断是否同一个人,并给出相似度评分。小程序如何实现人脸相似度比对,小程序纯前端怎么对比两张图片的相似度,计算两幅图像的相似度,图像相似度对比方法,调用百度AI的人脸识别,微信小程序中实现人脸识别认证,实现人脸检测、人脸

🏆 前端领域优质创作者 4862

实战封神!YOLOv7 轻量化部署全攻略:ONNX格式转换+TensorRT极致加速(速度直接提升3-5倍,精度无损)

部署核心链路,这是YOLO系列部署的最优解,速度提升3~5倍,精度无损;ONNX是桥梁:解决模型兼容性问题,简化后能去掉冗余节点,是TensorRT加速的前提;TensorRT是核心:NVIDIA显卡的极致加速引擎,FP16量化是速度与精度的最优平衡,无需手动配置,一键开启;轻量化终极组合YOLOv7-tiny + 416尺寸 + TensorRT FP16,速度提升5~8倍,满足所有实时检测场景;避坑核心:转换参数必加,推理尺寸必须一致,engine文件显卡专属。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 308

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

图解Java设计模式之状态模式APP抽象活动问题状态模式基本介绍状态模式的原理类图状态模式解决APP抽奖问题 APP抽象活动问题 请编写程序完成APP抽象活动,具体要求如下 : 1)加入每参加一个这个活动要扣除用户50积分,中奖概率是10%。 2)奖品数量固定,抽完就不能抽奖。 3)活动有四个状态 :可以抽象、不能抽象、发放奖品和奖品领完。 4)活动的四个状态转换关系图(右图) 状态模式基本介绍...

不一样的花朵的博客 806

最优化方法与数学建模

在本篇博客中,我们将探讨最优化方法在数学建模中的应用。首先,我们将介绍几种常见的最优化方法,如梯度下降、牛顿法和遗传算法。接着,我们将详细阐述这些方法的原理和算法。最后,我们将通过一个数学建模案例,展示如何使用Matlab实现这些方法。本文旨在为大家提供一个清晰的思路,以便更好地理解和应用最优化方法。

YOLO 439

java 23 种设计模式-21-java 状态模式(State Pattern)

目录 目录 状态模式 实际案例 定义 测试 实现方式 UML & Code UML Code 系列导航 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 实际案例 类信息概览: ...

3万+

YOLO26-seg分割优化:FPN涨点&轻量化篇 |多级特征融合金字塔(HS-FPN),助力小目标检测

​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 282

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java中23种设计模式--状态模式

兄弟们,老铁们.又到了学习锻炼我们可爱小小大脑的时候了~~~~~ 今天继续来学习设计模式,正所谓一天一个效果不错!! 喝了这碗鸡血,学就完了~~~ 学习是为了长大后遇到自己喜欢的人的时候吧不自惭形愧。能光鲜亮丽的出现。 1.状态模式定义 GOF中给状态模式的定义为:允许一个对象在其内部状态改变时改变它的行为. 能够让程序根据不同的外部情况来做出不同的响应,最简单的方法就是在程序中使用 if else来讲可能发生的外部情况全部考虑到再通过判断进行选择响应.但是这种方法对于发咋的状态判断就会变得混乱容易产生.

weixin_37967166的博客 244

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java实现23种设计模式之状态模式

状态模式(State Pattern)中,类的行为是基于它的状态改变的。 例如QQ的隐藏在线功能。使用场景可用于 1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。 通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。 而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。 也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆...

weixin_30402085的博客 78

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

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

java设计模式-23状态模式

定义: 它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中 符合“开闭原则”。容易增删状态 缺点:会产生很多类。每个状态都要一个对应的类,当状态过多时会产生很多类,加大维护难度 角色 Context 类为环境角色, 用于维护State实例,这个实例定义当前状态 State 是抽象状态角色,定义一个接口封装

huanghuang9426的博客 124

Java23种设计模式——状态模式

状态模式

谢耀眼 337

java 的状态模式_23种设计模式系列之状态模式

在网上买东西都见过一件9折,两件5折,限购两件等等这样的宣传语,我们买不同数量的衣服,就会有不同的折扣,这就是今天所讲的状态模式。一、认识状态模式1、概念状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。也就是说,我们把不同的状态包装成一个抽象类,每一个状态都成为一个独立的类。当状态不同时,处理的状态类也就不同了。如果难以理解我们拿上面商场打折扣的那个例子...

weixin_42125192的博客 253

23种设计模式【Java】解析 - 状态模式

状态模式 目的 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。 类图 角色 Context: 环境类 State: 抽象状态类 ConcreteState: 具体状态类 实现 抽象状态类 public interface State { public void doAction(Context context); } 抽象状态类 public class StartState imp

liyifan687的博客 362

Java设计模式(23):状态模式

23,状态模式 23.1,问题引入_APP抽奖活动 提供一种抽奖活动,每一次抽奖扣除用户50积分,且中奖概率为10%,奖品数量固定,送完为止 活动存在四种状态: 不能抽奖:未进行积分兑换 可以抽奖:已经进行积分兑换。抽奖完成后,如果未中奖,转到不能抽奖;如果中奖,转到发放奖品 发放奖品:对中奖用户发放奖品。奖品发送后,如果还有剩余奖品,转到不能抽奖;如果奖品已经送完,转到奖品领完 奖品领完:奖品全部领完 这种需求可以通过状态模式完成 23.2,基本介绍 状态模式(State Pattern):主

zp_zhang的博客 516

Java23种设计模式——17.行为型模式之状态模式

Java中除去有设计原则之外,还有23中设计模式。 这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。 并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。 那我们今天要学习行为型模式中的状态模式 ! 状态模式 我们先来看看什么叫做状态模式 我们可以通过百科了解到,状态模式是可以让一个对象内部状态改变,然后改变它的行为,这样对象看起来修改了它的类,可能说起来比较抽象,我们举一个例子 就用天气来说,天气可以有晴天、有下雨天、刮...

胖子胖子大胖子的博客 1065

JAVA开发的23种设计模式之 --- 状态模式

状态模式 概述:允许一个对象在其内部状态改变时改变他的行为.对象看起来似乎修改了它的类帮助理解:可以将状态模式的场景理解为QQ的状态,不同的状态对于他的QQ好友来说,行为是不一样的.例如:隐身状态对于好友来说不可见.总结下来状态模式就有两个要点:1.可以通过改变状态来获得不同的行为.2.对象看起来有所变化(在例子中可以理解为,你的好友可以看到你的变化)使用场景:对象的行为依赖于他的状态.并且

叶孤心的专栏 378

Java 23种设计模式之状态模式

状态模式

小成的博客 211
上一篇: JAVA23种设计模式之组合模式
下一篇: JAVA23种设计模式之代理模式(一)远程代理RMI
CoderJu
博客等级 码龄11年 11粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值