22、状态模式

状态模式

 

1、定义

许一个对象的内部状态改变时改变它的行为。

 

2、结构图



 

Light :环境,也称为上下文,用来定义客户感兴趣的接口,同时维护一个具体处理当前状态的实例对象。
LightState:状态接口,用来封装与上下文的一个特定状态所对应的行为。
On/OffState:具体实现状态的处理类,每个实现一个跟上下文相关联的状态的具体处理。
 
3、代码
(1)light类
public class Light {

	public Light(LightState state) {
		super();
		this.state = state;
	}

	private LightState state;
	
	public void pressSwitch(){
		state.pressSwitch(this);
	}

	public LightState getState() {
		return state;
	}

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

}
 (2)状态抽象类
/**
 * 灯的状态
 * @author qiang
 *
 */
public abstract class LightState {
	
	public abstract void pressSwitch(Light light);

}
 (3)开启状态
/**
 * 灯开启状态
 * @author qiang
 *
 */
public class OnState extends LightState {

	/**
	 *
	 */
	@Override
	public void pressSwitch(Light light) {
		System.out.println("当前状态为on");
		light.setState(new OffState());
	}

}
 (4)灯关闭状态
/**
 * 灯关闭状态
 * @author qiang
 *
 */
public class OffState extends LightState {

	@Override
	public void pressSwitch(Light light) {
		System.out.println("当前状态为off");
		light.setState(new OnState());
	}

}
 (5)客户端
public class Client {
	
	public static void main(String[] args) {
		LightState state = new OnState();
		Light light = new Light(state);
		light.pressSwitch();
		light.pressSwitch();
		light.pressSwitch();
		light.pressSwitch();
	}

}
 (6)运行结果
当前状态为on
当前状态为off
当前状态为on
当前状态为off
 
 
周立功CAN盒二次开发实录:用QT5.1.0解析汽车CAN报文(附数据可视化技巧) 本文详细介绍了基于QT5.1.0和周立功USBCAN-E-U设备进行汽车CAN总线二次开发的实战过程。核心内容包括利用CANdb++数据库解析原始报文并转换为物理值,以及通过QCustomPlot库实现高性能实时数据可视化,为车载诊断与车联网开发提供了一套完整的工程实践方案。 阅读详情

相关推荐

非sudo用户如何安全使用Docker:Rootless模式实战指南

Docker Rootless模式是一种基于Linux用户命名空间(userns)的容器运行时安全机制,它通过UID/GID映射、fuse-overlayfs文件系统和slirp4netns网络栈,在不提升权限的前提下实现容器隔离。其核心原理是将容器内root身份映射为宿主机非特权用户,从而规避docker组等价root的安全风险。相比传统root模式,Rootless在权限控制、逃逸防护和多租户隔离方面具备天然优势,适用于CI/CD流水线、Kubernetes边缘节点及受限生产环境。本文聚焦无sudo权限

weixin_30274627的博客 351

22-Java状态模式 ( State Pattern )

1. 意图允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类2. 主要解决对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为3. 何时使用代码中包含大量与对象状态有关的条件语句4. 如何解决将各种具体的状态类抽象出来5. 关键代码通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。

深入Java世界:探索编程之美与技术深度 995

UE5笔记【十二】蓝图函数BluePrint Function

蓝图函数BluePrint Function。蓝图类。蓝图变量。

xiaoyaolangwj的博客 4395

尚硅谷设计模式学习(22)---[状态模式(State Pattern)]

尚硅谷传送门==>B站尚硅谷Java设计模式 ❤❤❤感谢尚硅谷❤❤❤ 最近开始计划学习一下设计模式了,加油!!! 状态模式 来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为一一对应,状态之间可以相互转换. 原理图 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了这个类. 当一个对象有很多种状态,状态之间还会相互转换,对不同的状态要求有不同的行为,可考虑用状态模式 解决一个案例 APP抽奖活动 具体要求: 1假如每参加一次这个活动要扣除用户5

从零开始的异世界JAVA学习 311

SiC双向车载充电器技术解析与V2G应用

碳化硅(SiC)功率器件凭借其高击穿电场强度、优异热导率和低开关损耗特性,正在重塑电力电子系统的设计边界。作为第三代半导体材料的代表,SiC MOSFET通过降低80%的开关损耗,使车载充电器(OBC)效率突破96.5%。在双向能量转换架构中,图腾柱PFC与CLLC谐振变换器的组合实现了ZVS软开关,配合三维集成散热方案使功率密度达54W/in³。这些技术进步直接支撑了V2G(车辆到电网)应用场景,使电动车成为虚拟电厂(VPP)的关键单元。通过智能充放电策略优化,电池循环寿命可提升至4000次以上,为电力市

weixin_30693683的博客 276

逆向分析TikTok的Cronet网络库:定位libsscronet.so并Hook关键SSL函数

本文深入探讨了逆向分析TikTok的Cronet网络库的技术细节,重点介绍了如何定位libsscronet.so并Hook关键SSL函数。通过Java到Native的调用链路追踪、So库定位策略和SSL验证函数的动态Hook技巧,帮助开发者突破定制化网络库的协议加密防护,实现流量解密和协议分析。

weixin_27875131的博客 972

22.状态模式

状态模式 状态模式:就是状态会根据流程来变化,例如工作中常见的工作流(请假申请)等; Context:这里面存放了整个流程状态的属性,还有一个流程启动方法; State:定义一个流程执行方法,并依赖Context,每个流程节点都必须实现该接口,这样当流程到这个节点时,就能拿到当前的流程状态(Context); /** * 流程控制 * */ public class FlowContext { private boolean flag; // 代表流程是否结束 /**

lq6812574的博客 207

华为OD机试 - 统计文本数量(Java 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1438

极速理解设计模式系列:22.状态模式(State Pattern)

四个角色:抽象状态类(State)、具体状态类(ConcreateState)、情景类(Context)、客户端(Client) 抽象状态类(State):提供一个与情景类有关的State行为。 具体状态类(ConcreateState):实现这个行为,实现一个状态。 情景类(Context):维护一个S...

weixin_33779515的博客 86

华为OD机试 - 计算数列位置N的值 - 模拟法(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。输入 M,N 两个数,则按照以下规则形成一个数列。数列的前 M 个元素的值为 1 到 M从 M+1 个元素开始,计算逻辑为如果其前 M 个元素中,存在值相同的元素,则该位置上的数值等于前 M 个数中最大数值与最小数值之和。如果其前 M 个元素中,

学Java,找哪吒 508

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服务器上需要配置云产品流转,让设备A的数据上传后自动发送给设备B。这样就完成了视频画面数据的流转。不过因为阿里云的最大数据限制,每次最大发送10240字节的数据。

1万+

22. 状态模式

在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 ...

周壮的博客 45

【Claude】API Error 通用错误:错误码含义与标准排查流程 bug报错已解决

Claude API 各类错误码速查与标准排查流程。

博客 8246

22状态模式State

一、什么是状态模式   State模式也叫状态模式,是行为设计模式的 一种。State模式允许通过改变对象的内部状态 而改变对象的行为,这个对象表现得就好像修改 了它的类一样。 二、状态模式的应用场景   状态模式主要解决的是当控制一个对象状态转 换的条件表达式过于复杂时的情况。把状态的判 断逻辑转译到表现不同状态的一系列类当中,可 以把复杂的判断逻辑简化。 三、状态模式的结构...

weixin_34315665的博客 91

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

23种设计模式(22)-状态模式

23种设计模式(22)-状态模式 一、概述     当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。状态模式是一种对象行为型模式。 二、适用场景     用于解决系统中复杂对象的多种状态转换以及不同状态下行为的

huangshulang1234的博客 263

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

22、设计模式之状态模式(State)

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

weixin_45817985的博客 1263

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

22 行为型模式-状态模式

代码示例//抽象状态接口//声明抽象方法,不同具体状态类可以有不同实现。

weixin_39563769的博客 851

Go设计模式(22)-状态模式

状态模式使用的相对较少,主要是因为会引入大量的状态类,导致代码比较难维护。但是合适的场景使用状态模式,可以把复杂的判断逻辑简化。

434

python 状态模式_22-Python与设计模式--状态模式

一、电梯控制器电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计,把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运行、停止,那流程也是很复杂的。首先,开门状态不能开门、运行、停止;停止状态不能关门,停止;运行状态不能开门、关门、运行。要用一个一个if…else…实现,首先代码混乱,不易维护;二是不易扩展。至于各种设计原则什么的……那该如何实...

weixin_39918747的博客 123

第22讲:State 状态模式

对象状态影响对象行为 对象拥有不同的状态,往往会行使不同的行为……   动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。 如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?   意图(Intent) 允许一个对象在其内

不积跬步,无以至千里;不积小流,无以成江海 715

第22章 行为型模式—状态模式

1. 状态模式(State Pattern)的定义 (1)定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。   ①状态和行为,它们的关系可以描述为“状态决定行为”   ②因状态是在运行期被改变,行为也会在运行期根据状态的改变而改变。看起来,同一个对象,在不同的运行时刻,行为是不一样的,就像是类被修改了一样。 (2)状态模式的结构和说明   ①Contex...

CherishPrecious的博客 495

设计模式(22)状态模式

状态模式简介 在实际开发中,通常会遇到有多个状态的对象,这个对象在不同的状态下,都会有不同的行为。 状态模式的重点在于状态转换,很多时候,对于一个对象的状态,我们都是让这个对象包含一个状态的属性,这个状态属性记录着对象的具体状态,根据状态的不同使用分支结构来执行不同的功能;就像上面说的,类中存在大量的结构类似的分支语句,变得难以维护和理解。 状态模式消除了分支语句,就像工厂模式消除了简单工厂模式的分支语句一样,将状态处理分散到各个状态子类中去,每个子类集中处理一种状态,这样就使得状态的处理和转换清晰明确。状

qq_24649627的博客 191
上一篇: 21、备忘录模式
下一篇: 23、模板方法模式
wangmuduxingxia2
博客等级 码龄17年 0粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值