当前位置: 首页 > news >正文

C++ 设计模式-状态模式

火箭状态模式,涵盖发射、多级分离、入轨、返航、紧急状态等流程,以及状态间的转换逻辑:


状态设计

  1. 状态列表

    • IdleState(待机)
    • PreparingState(准备)
    • LaunchingState(发射中)
    • FirstStageSeparatingState(一级分离)
    • SecondStageSeparatingState(二级分离)
    • ThirdStageSeparatingState(三级分离)
    • OrbitingState(轨道运行)
    • ReturnPreparingState(返航准备)
    • ReturningState(返航中)
    • EmergencyState(紧急状态)
    • LandedState(着陆)
  2. 状态转换图

    Idle → Preparing → Launching → FirstStageSeparating → SecondStageSeparating → ThirdStageSeparating → Orbiting↑      |               |           |                     |                       |             ↓|      |               |           |                     └─── EmergencyState ←───┘             ||      ↓               ↓           ↓                                                           ↓└── LandedState ←─ Returning ←─ ReturnPreparing ←──────────────────────────────────────────────┘
    

完整代码实现

#include <iostream>
#include <memory>
#include <stdexcept>class Rocket;// 抽象状态基类
class RocketState {
public:virtual void StartPreparation(Rocket& rocket) { Error("准备"); }virtual void StartLaunch(Rocket& rocket)      { Error("发射"); }virtual void SeparateStage(Rocket& rocket)    { Error("分离"); }virtual void EnterOrbit(Rocket& rocket)       { Error("入轨"); }virtual void ReturnToEarth(Rocket& rocket)    { Error("返航"); }virtual void HandleEmergency(Rocket& rocket)  { Error("紧急处理"); }virtual void Land(Rocket& rocket)             { Error("着陆"); }virtual ~RocketState() = default;protected:void Error(const std::string& action) {std::cout << "[Error] 当前状态不支持 " << action << " 操作!\n";}
};// ---------- 具体状态类 ----------
class IdleState : public RocketState {
public:void StartPreparation(Rocket& rocket) override;
};class PreparingState : public RocketState {
public:void StartLaunch(Rocket& rocket) override;void HandleEmergency(Rocket& rocket) override;
};class LaunchingState : public 

相关文章:

C++ 设计模式-状态模式

火箭状态模式,涵盖发射、多级分离、入轨、返航、紧急状态等流程,以及状态间的转换逻辑: 状态设计 状态列表: IdleState(待机)PreparingState(准备)LaunchingState(发射中)FirstStageSeparatingState(一级分离)SecondStageSeparatingState(二级分离)ThirdStageSep…...

verilog基础知识

一,Verilog和VHDL区别 全世界高层次数字系统设计领域中,应用Verilog和VHDL的比率是80%和20%;这两种语言都是用于数字电路系统设计的硬件描述语言, 而且都已经是 IEEE 的标准。 VHDL 是美国军方组织开发的,VHDL1987年成为标准;Verilog 是由一个公司的私有财产转化而来,…...

14.8 Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统

Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统 关键词:Auto-GPT 架构设计、自主智能体开发、LangChain Agents、长期记忆系统、工具链编排 1. 自主智能体的核心架构设计 Auto-GPT 系统架构图解: #mermaid-svg-NuDU1eo6sXqhA6Ve {font-family:"trebuch…...

ubuntu安装docker docker/DockerHub 国内镜像源/加速列表【持续更新】

ubuntu安装docker & docker镜像代理【持续更新】 在Ubuntu上安装Docker&#xff0c;你可以选择两种主要方法&#xff1a;从Ubuntu的仓库安装&#xff0c;或者使用Docker的官方仓库安装。下面我会详细解释这两种方法。 方法一&#xff1a;从Ubuntu的仓库安装Docker 这种方…...

模拟实现分布式文件存储

Q1:如何解决海量数据存的下的问题 传统做法是在单机存储。但是随着数据变多&#xff0c;会遇到存储瓶颈。 单机纵向扩展&#xff1a;内存不够加内存&#xff0c;磁盘不够加磁盘。有上限限制&#xff0c;不能无限制加下去。 多机横向扩展&#xff1a;采用多台机器存储&#x…...

HW面试经验分享 | 北京蓝中研判岗

目录&#xff1a; 所面试的公司介绍 面试官的问题&#xff1a; 1、面试官先就是很常态化的让我做了一个自我介绍 2、自我介绍不错&#xff0c;听你讲熟悉TOP10漏洞&#xff0c;可以讲下自己熟悉哪些方面吗&#xff1f; 3、sql注入原理可以讲下吗&#xff1f; 4、sql注入绕WAF有…...

HarmonyOS学习第3天: 环境搭建开启鸿蒙开发新世界

一、引言 在数字化时代&#xff0c;操作系统作为连接用户与硬件设备的桥梁&#xff0c;其重要性不言而喻。HarmonyOS 作为华为公司推出的面向全场景的分布式操作系统&#xff0c;以其创新的理念和卓越的性能&#xff0c;正逐渐在全球范围内崭露头角。它打破了设备之间的界限&a…...

基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片&#xff1f;1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...

【react18】如何使用useReducer和useContext来实现一个todoList功能

重点知识点就是使用useReducer来攻坚小型的公共状态管理&#xff0c;useImmerReducer来实现数据的不可变 实现效果 实现代码 项目工程结构 App.js文件 import logo from "./logo.svg"; import "./App.css"; import TodoLists from "./comps/TodoLi…...

Java多线程三:补充知识

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Lambda表达式 简介&#xff1a; 希腊字母表中排序第十一位的字母&#xff0c;英语名称为Lambda避免匿名内部类定义过多其实质属于函数式编程的概念 为什么要使用lam…...

go WEB框架

推荐选型 https://chat.deepseek.com/a/chat/s/e6061607-8f33-4768-a5f0-8970cb1ffefd echo github&#xff1a;https://github.com/labstack/echo wiki&#xff1a;https://echo.labstack.com/docs/quick-start block&#xff1a;https://blog.csdn.net/qq_38105536/artic…...

【Python爬虫(27)】探索数据可视化的魔法世界

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

渲染 101 支持 3ds Max 的渲染器及其优势

在 3ds Max 创作流程里&#xff0c;渲染环节对最终成果的呈现效果起着决定性作用&#xff0c;渲染 101 云渲染平台则为 3ds Max 用户提供了全面且高效的渲染解决方案。 支持的渲染器 V-Ray 渲染器 在 3ds Max 中应用广泛&#xff0c;具备全局光照、光线追踪技术&#xff0c;…...

在 Java 中使用 `if` 语句实现双重判定

关于在 Java 中使用 if 语句实现双重判定&#xff0c;并使用 Eclipse 和 JUnit4 进行单元测试的详细介绍&#xff1a; --- ### 一、双重判定的实现 **双重判定**指在 if 语句中通过逻辑运算符组合两个条件。常用方式&#xff1a; - **逻辑与 &&**&#xff1a;两个条件…...

Ollama 安装

Ollama 支持多种操作系统&#xff0c;包括 macOS、Windows、Linux 以及通过 Docker 容器运行。 Ollama 对硬件要求不高&#xff0c;旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 CPU&#xff1a;多核处理器&#xff08;推荐 4 核或以上&#xff09;。GPU…...

Docker Swarm 内置的集群编排

在现代容器化应用中&#xff0c;容器编排&#xff08;Container Orchestration&#xff09;是至关重要的&#xff0c;它负责自动化容器的部署、扩展、负载均衡和管理。Docker Swarm 是 Docker 提供的原生集群管理和容器编排工具&#xff0c;允许用户通过 Docker CLI 在多个 Doc…...

AF3 _build_query_to_hit_index_mapping函数解读

AlphaFold3 中templates模块的_build_query_to_hit_index_mapping函数是将原始查询序列(original_query_sequence)中的索引与hit 序列(hit_sequence)中的索引进行映射。 在蛋白质序列比对(如 HHsearch)中,hit 是与查询序列部分匹配的区域。由于存在缺口(-)和部分比对…...

Windows 中的启动项如何打开?管理电脑启动程序的三种方法

在日常使用电脑时&#xff0c;我们经常会发现一些应用程序在开机时自动启动&#xff0c;这不仅会拖慢系统的启动速度&#xff0c;还可能占用不必要的系统资源。幸运的是&#xff0c;通过几个简单的步骤&#xff0c;你可以轻松管理这些开机自启的应用程序。接下来&#xff0c;我…...

科普:“git“与“github“

Git与GitHub的关系可以理解为&#xff1a;Git是一种软件工具&#xff0c;而GitHub则是一个在线平台&#xff0c;它们是“一家子”。二者的关联最直接体现在你通过Git在GitHub仓库中clone软件包到你的机器中来。 具体来说&#xff1a; 一、Git 定义&#xff1a;Git是一个开源的…...

module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法

module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法 pip install opencv-python4.7.0.72 -i https://pypi.tuna.tsinghua.edu.cn/simple 测试&#xff1a; python -c"import cv2"...

国产编辑器EverEdit - 语法着色及嵌入式多语言着色

1 文档-着色及语法相关 1.1 应用场景 在编辑代码文件或脚本文件过程中&#xff0c;如果对语法着色、模式等文件进行了修改&#xff0c;需要立即生效时&#xff0c;可以通过文档-高级功能下的重新加载功能&#xff0c;立即生效相关配置。 1.2 使用方法 1.2.1 重新加载着色 着…...

设计模式教程:解释器模式(Interpreter Pattern)

1. 什么是解释器模式&#xff1f; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;通常用于处理语言&#xff08;例如数学表达式、SQL查询等&#xff09;中的语法和解释。该模式定义了一个文法&#xff0c;并通过解释器类来解释文法中…...

Three.js 快速入门教程【六】相机控件 OrbitControls

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...

【git】合并多个提交记录

1.说明 有时候因为某些小修改会导致代码多了很多不必要的提交&#xff0c;如果希望合并这些commit记录&#xff0c;我们可以使用rebase或者reset命令完成合并 2.rebase 这种方式是通过变基操作完成的&#xff0c;它适用于已经push到远程的情况&#xff0c;当我们变基好了之后…...

题海拾贝:【枚举】P2010 [NOIP 2016 普及组] 回文日期

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…...

SQL Server 链接服务器 MySQL 详细步骤

目录 前言 一、准备工作 1. 确认需求 2. 获取权限 二、安装必要的驱动程序和工具 1.下载并安装MySQL ODBC驱动&#xff1a; 2.安装 SQL Server 和 MySQL 的管理工具&#xff1a; 三、配置 SQL Server 以连接到MySQL 1.执行创建链接服务器的T-SQL语句&#xff1a; 2.配…...

Java集合框架之List接口详解

目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…...

【大语言模型_4】源码编译vllm框架cpu版

背景&#xff1a; 通过官方提供的pip install vllm安装的vllm框架不支持cpu加载模型。因此需要本地编译。 系统环境 操作系统&#xff1a;欧拉2203 python版本&#xff1a;3.10 编译步骤 一、安装gcc/g/cmake 1、下载源码&#xff1a;https://github.com/vllm-project/vllm 安…...

城市地质安全专题连载⑦ | 加强国土空间规划管控,规避城市地质安全风险

作者 | 徐海洋 在国土空间规划中&#xff0c;地质调查扮演着先导性和基础性的角色。它如同一把无形的尺子&#xff0c;衡量着每一寸土地的开发潜力与安全边界&#xff0c;不仅为城市规划提供了科学依据&#xff0c;还在规避地质安全风险、优化资源配置方面发挥着关键作用。然而…...

Go入门之函数

func subn1(x, y int) int {sub : x - yreturn sub } 函数参数简写&#xff0c;可以省略前边的&#xff0c;和后边的类型一样 func addn1(x ...int) int {sum : 0for _, v : range x {sum v}return sum } 求可变参数的核&#xff0c;表示传参的个数不确定 func addn1(x int…...

前端如何把SEO优化做到极致✅

在前端&#x1f680;如何把SEO优化做到极致✅ SEO 是 Search Engine Optimization 的缩写&#xff0c;即搜索引擎优化。它是一种通过调整网站的内容、结构、外部链接等方面的优化手段&#xff0c;来提高网站在搜索引擎中的自然排名&#xff0c;以求得获得更多的流量&#xff0…...

【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型

线程同步 条件变量 当一个线程互斥地访问某个变量时&#xff0c;它可能发现在其它线程改变状态之前&#xff0c;它什么也做不了。 例如&#xff1a;一个线程访问队列时&#xff0c;发现队列为空&#xff0c;它只能等待&#xff0c;直到其它线程将一个节点添加到队列中。这…...

Openssl交叉编译

在 OpenSSL 交叉编译中&#xff0c;linux-aarch64是一个用于指定目标平台的配置选项&#xff0c;表示目标是 X86 架构的 64位系统。这个选项可以从 OpenSSL 的 ./Configure 命令支持的平台列表中获取。 你可以通过运行以下命令查看 OpenSSL 支持的所有平台配置选项&#xff1a…...

基于Ubuntu系统的docker环境对MySQL8.0.36主从部署

1. 环境准备 1、1 前言 本文基于Ubuntu系统的docker环境对MySQL8.0.36进行2台物理服务器的主从部署。1.2 服务器硬件环境准备 准备2台物理服务器192.168.8.6 和 192.168.8.9。 2台物理服务器在同一个局域网环境下,可以相互网络通信。 服务器操作系统版本:Ubuntu 24.04.1 L…...

吃一堑长一智

工作中经历&#xff0c;有感触记录下 故事一 以前在一家公司时&#xff0c;自己是一名开发人员&#xff0c;遇到问题请教领导解决方案&#xff0c;当时领导给了建议&#xff0c;后来上线后出问题了&#xff0c;背了锅。心里想的是领导说这样做的呀&#xff0c;为什么出问题还…...

详解Nginx 配置

一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发&#xff0c;自 2004 年发布以来&#xff0c;凭借其高性能、低内存消耗、高并发处理能力等特点&#xf…...

《深度揭秘:DeepSeek如何解锁自然语言处理密码》

在人工智能蓬勃发展的当下&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了连接人类与机器的关键桥梁。作为该领域的佼佼者&#xff0c;DeepSeek以其卓越的语义理解和生成能力&#xff0c;备受瞩目。今天&#xff0c;就让我们深入探寻DeepSeek在自然语言处理中实现语…...

备战蓝桥杯 -牛客

习题-[NOIP2006]明明的随机数 1046-习题-[NOIP2006]明明的随机数_2021秋季算法入门班第一章习题&#xff1a;模拟、枚举、贪心 思路&#xff1a;这道题用stl的set&#xff0c;今天写这道题复习了一下set的用法&#xff1a; s.find(a) s.end()的意思是判断元素a是否存在于集…...

Pandas:从一个DataFrame中直接索引赋值到另一个索引位置出错的Bug及其解决方案

这里写自定义目录标题 动机代码1&#xff0c;这个代码是有问题的代码2&#xff0c;这个代码是我调试代码。拆分代码&#xff0c;最后找到问题所在&#xff0c;这个代码是正确的代码3。本以为找到问题所在之后&#xff0c;又稍微修改了下代码 2&#xff0c;这个代码还是没问题的…...

电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?

尽管 TPM 2.0 已经内置在许多新电脑中&#xff0c;但很多人并不知道如何激活这一功能&#xff0c;甚至完全忽略了它的存在。其实&#xff0c;只需简单的几步操作&#xff0c;你就能开启这项强大的安全特性&#xff0c;为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...

请谈谈 Vue 中的响应式原理,如何实现?

一、Vue2响应式原理&#xff1a;Object.defineProperty的利与弊 实现原理&#xff1a; // 数据劫持核心实现 function defineReactive(obj, key, val) {const dep new Dep(); // 依赖收集容器Object.defineProperty(obj, key, {get() {if (Dep.target) { // 当前Watcher实例…...

深入解析浏览器渲染全流程:从URL输入到页面渲染的底层原理与性能优化(附实战代码)

本文以https://example.com为例&#xff0c;逐层剖析浏览器从输入URL到页面渲染的完整链路&#xff0c;涵盖DNS解析、TCP/TLS握手、HTTP请求、DOM/CSSOM构建等核心阶段&#xff0c;结合代码示例与性能调优技巧&#xff0c;助你掌握浏览器底层运行机制。 一、导航阶段&#xff1…...

vue 识别 <think></think>

在 Vue.js 中处理自定义标签或者在 HTML 中嵌入特定标记&#xff08;例如 &#xff09;通常涉及到两个方面&#xff1a;模板语法和组件化。 模板语法 Vue 使用基于 HTML 的模板语法来声明式地将 DOM 绑定至底层数据。默认情况下&#xff0c;Vue 会忽略未知元素&#xff0c;除非…...

Three.js 快速入门教程【一】开启你的 3D Web 开发之旅

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...

ubuntu 执行 sudo apt-get update 报错

记录一下&#xff0c;遇到这个问题了&#xff0c;网络上看到的解决办法&#xff0c;亲测有效 执行sudo apt-get update ,却报以下错误&#xff0c;“SECURITY: URL redirect target contains control characters rejecting ” 经检查发现&#xff0c;/etc/apt/source.list 下的…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-loaders.py

loaders.py ultralytics\data\loaders.py 目录 loaders.py 1.所需的库和模块 2.class SourceTypes: 3.class LoadStreams: 4.class LoadScreenshots: 5.class LoadImagesAndVideos: 6.class LoadPilAndNumpy: 7.class LoadTensor: 8.def autocast_list(source…...

ubuntu24基于虚拟机无法从主机拖拽文件夹

以下是解决问题的精简步骤&#xff1a; 安装 open-vm-tools-desktop&#xff1a; bash复制 sudo apt-get install open-vm-tools-desktop 重启虚拟机后&#xff0c;文字复制粘贴功能可正常工作。 禁用 Wayland&#xff1a; 编辑 /etc/gdm3/custom.conf 文件&#xff1a; bash复…...

二叉树(数据结构)

二叉树 二叉树也是用过递归定义的结构 先序遍历又称前序遍历 ​​ ​​ 按照先序遍历的方法去手算处理这个二叉树 ​​ 先A B C 再 A B D E C&#xff08;也就是把B换成BDE再放进去&#xff09; 再 A B D E C F 看这个插入的方法要掌握像二叉树这样向一个…...

Vue 实现通过URL浏览器本地下载 PDF 和 图片

1、代码实现如下&#xff1a; 根据自己场景判断 PDF 和 图片&#xff0c;下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…...

MySQL版本选择与安装

MySQL版本选择与安装 MySQL 5.5 优点: 稳定性&#xff1a;5.5版本是长期支持&#xff08;LTS&#xff09;版本&#xff0c;因此它非常稳定&#xff0c;被广泛部署在生产环境中。 兼容性&#xff1a;与旧版本的MySQL和各种应用程序有很好的兼容性。 缺点: 过时&#xff1a;…...