行为型模式 - 状态模式 (State Pattern)

embedded/2025/3/1 20:56:09/

行为型模式 - 状态模式 (State Pattern)

状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。下面为你介绍几个状态模式的经典案例。


// 抽象状态类
abstract class LiftState {protected Lift lift;public LiftState(Lift lift) {this.lift = lift;}public abstract void open();public abstract void close();public abstract void run();public abstract void stop();
}// 电梯类
class Lift {private LiftState currentState;public Lift() {// 初始状态为关门状态this.currentState = new ClosedState(this);}public void setState(LiftState state) {this.currentState = state;}public void open() {currentState.open();}public void close() {currentState.close();}public void run() {currentState.run();}public void stop() {currentState.stop();}
}// 开门状态类
class OpenState extends LiftState {public OpenState(Lift lift) {super(lift);}@Overridepublic void open() {System.out.println("电梯已经开门,无需重复操作");}@Overridepublic void close() {System.out.println("电梯门关闭");lift.setState(new ClosedState(lift));}@Overridepublic void run() {System.out.println("电梯门未关闭,不能运行");}@Overridepublic void stop() {System.out.println("电梯处于开门状态,已经停止");}
}// 关门状态类
class ClosedState extends LiftState {public ClosedState(Lift lift) {super(lift);}@Overridepublic void open() {System.out.println("电梯门打开");lift.setState(new OpenState(lift));}@Overridepublic void close() {System.out.println("电梯门已经关闭,无需重复操作");}@Overridepublic void run() {System.out.println("电梯开始运行");lift.setState(new RunningState(lift));}@Overridepublic void stop() {System.out.println("电梯已经停止,处于关门状态");}
}// 运行状态类
class RunningState extends LiftState {public RunningState(Lift lift) {super(lift);}@Overridepublic void open() {System.out.println("电梯正在运行,不能开门");}@Overridepublic void close() {System.out.println("电梯正在运行,门已经关闭");}@Overridepublic void run() {System.out.println("电梯正在运行,无需重复操作");}@Overridepublic void stop() {System.out.println("电梯停止运行");lift.setState(new StoppedState(lift));}
}// 停止状态类
class StoppedState extends LiftState {public StoppedState(Lift lift) {super(lift);}@Overridepublic void open() {System.out.println("电梯门打开");lift.setState(new OpenState(lift));}@Overridepublic void close() {System.out.println("电梯门已经关闭");}@Overridepublic void run() {System.out.println("电梯开始运行");lift.setState(new RunningState(lift));}@Overridepublic void stop() {System.out.println("电梯已经停止,无需重复操作");}
}// 客户端代码
public class LiftSystem {public static void main(String[] args) {Lift lift = new Lift();// 开门lift.open();// 尝试运行(开门状态下不能运行)lift.run();// 关门lift.close();// 运行lift.run();// 停止lift.stop();// 开门lift.open();}
}

http://www.ppmy.cn/embedded/169148.html

相关文章

Brave 132 编译指南 Android 篇 - 初始化构建环境 (六)

1. 引言 在成功配置好 Python、Node.js 等基础开发环境并切换到正确的 Brave 版本分支之后,我们来到了编译前的最后一个关键环节:初始化 Brave 浏览器的构建环境。这个过程就好比为一场盛大的演出搭建舞台、调试灯光音响,确保所有必要的组件…

HTTP~文件 MIME 类型

MIME(Multipurpose Internet Mail Extensions)类型,即多用途互联网邮件扩展类型,是一种标准,用来表示文档、文件或字节流的性质和格式。最初是为了在电子邮件系统中支持非 ASCII 字符文本、二进制文件附件等而设计的&a…

抖音生活服务加强探店内容治理,2024年达人违规率下降30%

发布 | 大力财经 2月27日,抖音生活服务发布《2024抖音生活服务消费者权益保护年度报告》(以下简称“报告”)。报告显示,过去一年,抖音生活服务针对消费者反感的虚假、夸张探店内容,开展了专项治理。通过一…

网络安全应急响应中主机历史命令被删除 网络安全事件应急响应

17.1 网络安全应急响应概述 “居安思危,思则有备,有备无患。”网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。本节主要阐述网络安全响应的概念、网络安全应急响应的发展、网络安全应急响应的相关要求。 17.1.1 网络安全应急响应概…

.sql文件怎么打开

.sql 文件是一个 SQL 脚本文件,通常包含了数据库的 SQL 查询语句,可以是创建数据库、创建表、插入数据、查询数据等操作。要打开并查看 .sql 文件,你可以使用以下几种方法: 1. 使用文本编辑器打开 .sql 文件是一个文本文件&…

【Excel】 Power Query抓取多页数据导入到Excel

抓取多页数据想必大多数人都会,只要会点编程技项的人都不会是难事儿。那么,如果只是单纯的利用Excel软件,我还真的没弄过。昨天,我就因为这个在网上找了好久发好久。 1、在数据-》新建查询-》从其他源-》自网站 ,如图 …

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理(Financial AI Agents)2. 金融大型语言模型(Financial LLMs)3. LLMOps4. 数据操作(DataOps)5. 多源LLM基础模型(Multi-Source LLM Foundation Models&am…

基于Spring Boot的二手物品交易平台设计与实现(LW+源码)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…