c++之状态模式

C++ gRPC状态处理:grpc::Status各函数详解与踩坑指南 在C++后端开发中,gRPC作为跨语言远程调用框架,每个RPC方法的成败最终都体现在一个grpc::Status对象上。该对象由错误码与错误消息构成,通过ok()、error_code()、error_message()、ToString()等接口暴露状态细节,为超时、参数非法、服务不可达等异常提供了统一的分类与排查入口。理解这些函数不仅能提升客户端/服务端的状态判断准确性,也能规避异步回调中悬垂引用、错误码被代理改写等坑。无论是同步调用的四步判断链,还是异步完成队列下的生命周期管理,正确使用grpc::S 阅读详情

状态模式

定义:当一个对象的内在状态改变时,允许改变它的行为,这个对象看起来像是改变了其类。

它属于行为型模式

栗子场景:一天根据当前的时间段,来决定一个人是吃早饭还是午饭以及晚饭。即根据时间的状态变化,改变人吃什么的行为。

代码:

#include <iostream>
#include <Windows.h>

using namespace std;

class Eat;

class MealStatus
{
public:
	virtual void doEat(Eat *eat) = 0;
};

class Eat{
public:
	Eat(MealStatus *m) :m_status(nullptr)
	{
		m_status = m;
	}
	~Eat()
	{
		if (m_status)
		{
			delete m_status;
			m_status = nullptr;
		}
	}

	void request()
	{
		m_status->doEat(this);
	}

	void setStatus(MealStatus* s)
	{
		m_status = s;
	}

	void setHour(int h)
	{
		m_hour = h;
	}

	int getHour()
	{
		return m_hour;
	}

private:
	MealStatus* m_status;
	int m_hour;
};

//夜宵
class NightSnack :public MealStatus
{
public:
	NightSnack(){}
	void doEat(Eat *eat)
	{
		cout << "吃夜宵时间段来了,吃货的一天准备结束啦" << " current-time=" << eat->getHour() << endl;
	}
};

//晚餐
class Dinner :public MealStatus
{
public:
	Dinner(){}
	void doEat(Eat *eat)
	{
		if (eat->getHour() < 21)
		{
			cout << "吃晚饭时间段" << " current-time=" << eat->getHour() << endl;
		}
		else
		{
			eat->setStatus(new NightSnack);
			eat->request();
		}		
	}
};

//午餐
class Lunch :public MealStatus
{
public:
	Lunch(){}
	void doEat(Eat *eat)
	{
		if (eat->getHour()<14)
		{
			cout << "吃午饭时间段" << " current-time="<<eat->getHour()<<endl;
		}
		else
		{
			eat->setStatus(new Dinner);
			eat->request();
		}
	}
};

//早餐
class Breakfast :public MealStatus
{
public:
	Breakfast(){}
	void doEat(Eat *eat)
	{
		if (eat->getHour() < 9)
		{
			cout << "吃早饭时间段" << " current-time=" << eat->getHour()<< endl;
		}
		else
		{
			eat->setStatus(new Lunch);
			eat->request();
		}

	}
};

int main()
{
	Eat *eat = new Eat(new Breakfast);

	//切换状态
	eat->setHour(8);
	eat->request();

	eat->setHour(13);
	eat->request();

	eat->setHour(20);
	eat->request();

	eat->setHour(24);
	eat->request();

	if (eat)
	{
		delete eat;
		eat = nullptr;
	}

	return 0;
}

效果

C++设计模式——State状态模式 状态模式是一种行为型设计模式,状态模式允许对象在内部状态发生切换时改变它自身的行为。状态模式的主要目的是将复杂的状态切换逻辑抽象化为一组离散的状态类,使代码结构更加清晰和易于维护。状态模式将对象的行为封装到不同的状态类中,从而在应用程序的状态发生改变时,会自动切换到对应的状态类。状态模式使得状态的切换被表现为类对象的切换。交通信号灯:交通信号灯有红灯、绿灯等多种状态。每个状态都定义了不同的行驶规则。购物流程:用户在购物流程中有多种状态,例如浏览商品、添加购物车、填写收货地址等。 阅读详情

相关推荐

C++ 状态模式

状态模式(State Pattern)是行为设计模式之一。当对象根据其内部状态改变其行为时,将使用状态设计模式。

青春不老,奋斗不止! 7904

C++状态模式(State)

UML类图(仅供参考)如下: 状态模式解决的问题: 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为,这个状态的判断不需要放在一个类中,而是在一系列类中判断,并且把这些行为在不同的多态中实现 源码 #include <list> class CContext; // 抽象状态类 // 用来处理工作类的一种状态 class CSt...

Yan_bb_5的博客 2078

C++设计模式20:状态模式

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为。在状态模式中,对象的类行为是基于它的状态而变化的,这使得它看起来像是改变了它的类。状态模式的核心思想是将对象的行为和状态分离开来,将每种状态封装成一个类,并且使得状态之间可以相互转换。这样,在对象内部状态改变时,它的行为也会发生相应的改变。状态模式通常涉及到以下几个角色:(1) Context(上下文):定义客户端感兴趣的接口,同时维护一个当前状态的引用。

琅嬛福地 2323

数据结构 c++ 单链表的基本操作

单链表的基本操作 创建链表 插入元素 删除元素 取出元素 逆位序创建链表 合并链表

z_zssss的博客 748

c++状态模式state

概念 State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。 角色和职责 Context:用户对象 拥有一个State类型的成员,以标识对象的当前状态; State:接口或基类 封装与Context的特定状态相关的行为; ConcreteState:接口实现类或子类

希望我的博客,能帮上你解决学习中工作中所遇到的问题 689

C++中实现状态模式的详细教程

状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为。它把对象的行为包装在不同的状态对象里,每一个状态对象都属于一个具体的状态。当对象的内部状态改变时,其行为也会随之改变,就像一个对象根据其状态来改变它的行为。接口是定义不同状态类必须遵守的规则和方法的集合。在C++中,这通常是通过抽象基类的形式来实现的。这样的接口定义确保了所有状态类都能以一致的方式被上下文类所使用。接口中的方法通常会与特定的事件相关联,确保当事件发生时,系统能够按照预定的行为来响应。

weixin_28931507的博客 1103

status函数(自学数据结构第一天)

个人认为今天学到的是status函数类型的意义: #define TRUE  1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE  -1 #define OVERFLOW  -2 //说明Status函数的返回值是这六种类型的数 status函数类型需要我们自己定义:typedef int Status

qwezhaohaihong 2万+

5分钟搞定!用Coze+剪映小助手批量生成萌宠视频(附完整工作流配置)

本文详细介绍了如何利用Coze工作流与剪映小助手快速批量生成萌宠视频的完整方案。通过智能内容生成、素材处理、剪辑组装和输出适配四大模块的协同,实现5分钟内完成高质量视频制作。特别适合多宠物账号运营者,工作流支持模板切换和参数修改,大幅提升内容生产效率。

weixin_28678151的博客 389

C++设计模式——状态模式(state pattern)

一、原理讲解 别名状态对象(object for state)。 1.1意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 1.2应用场景 一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为; 一个操作中含有庞大的分支语句的条件语句,且这些分支依赖于该对象的状态; 1.3结构图(UML图) 1.4代码实现步骤 a1 定义一个状态接口类IState,定义一个接口函数handle(); a2 定义一个具体状态类ConcreteState,实现接口函数handl

净无邪博客 1301

2021电子科技大学分布式系统期末考点精析与实战解析

本文深入解析2021年电子科技大学分布式系统期末考试核心考点,包括分布式事务、时钟同步、GFS架构等高频内容。基于回忆版试题,提供实战解析与应试技巧,帮助考生高效复习。重点涵盖两阶段提交、Cristian算法等关键技术,适合计算机专业学生备考参考。

weixin_29251131的博客 539

BERTopic模型入门教程(附代码+参数调节)

BERTopic 是一种用于从文本数据中提取主题模型的新型方法。通过结合 BERT嵌入和传统的主题模型来生成语义丰富的主题。传统的主题模型(如LDA)主要依赖于词频矩阵,而 BERTopic 通过预训练语言模型生成高维语义嵌入来捕捉词语间的复杂关系,因此可以更好地处理上下文信息。BERTopic模型可以看作是创建其主题表示的一系列步骤。核心原理如下:就本质而言,BERTopic就是一个拼装框架,可以把每部分都替换成其他模型,只要完成任务即可。

m0_52069102的博客 1万+

(三)行为模式:8、状态模式(State Pattern)(C++示例)

介绍状态模式的含义,应用场景,优缺点,以及C++实现的实例。

bigger_belief的博客 1171

文末含资料链接和视频讲解!YOLOv8集成CoordAtt注意力机制详细教程

本文详细介绍了如何在YOLOv8目标检测框架中集成CoordAtt注意力机制。首先解析了CoordAtt的工作原理,它通过分解式池化将位置信息嵌入到通道注意力中,相比传统注意力机制具有更好的空间信息保持能力。然后提供了PyTorch实现代码解析,包括自适应平均池化、Hard-Swish激活函数等关键实现细节。最后概述了YOLOv8架构,为后续集成CoordAtt提供基础。该教程适合具备深度学习基础的开发者,将理论与实践结合,帮助读者掌握这一目标检测优化技术。

FJN110的博客 266

行为模式之状态模式(State Pattern)C++实现

定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。将状态封装成为独立的类,并将动作委托到代表当前状态的对象。将状态逻辑和动作实现进行分离。 状态模式类图: 它与策略模式的类图一模一样,但是它们的差别在于“意图”。 它和程序状态机(PSM)不同,状态模式用类代表状态。Context会将行为委托给当前状态对象。状态模式允许Context随着状态的改变而改变行为。

xiaoding133的专栏【Stay hungry,Stay foolish】 1391

如何使用tinyalas接口从usb录音的同时从扬声器播放

3、 以上步骤确认完后,就可以修改tinyhostless.c程序,tinyhostless的本质就是边pcm_read(),边pcm_write();但原本tinyhostless只支持对同一声卡进行操作,所有需要修改其代码,改成录音和播放可支持不同声卡,如果是模拟声卡,有回环测试,可以实现边录边播放,但涉及USB声卡时,就没有现场的类似功能,有时候客户因为硬件特殊性,会有从USB录音的同时从扬声器播放出来的需求,本文简要描述如何使用tinyalsa接口实现该需求;

sdrgtywretyeruet的专栏 969

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

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

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

-- 第20种设计模式; 状态模式(State Pattern)是⼀种行为型设计模式,它适⽤于⼀个对象在不同的状态下有不同的行为时,⽐如说电灯的开、关、闪烁是不停的状态,状态不同时,对应的行为也不同,在没有状态模式的情况下,为了添加新的状态或修改现有的状态,往往需要修改已有的代码,这违背了开闭原则,而且如果对象的状态切换逻辑和各个状态的行为都在同⼀个类中实现,就可能导致该类的职责过重,不符合单⼀职责原则。

K1_uestc的博客 2450

优化算法 | 赏金猎人优化算法(Bounty Hunter Optimizer, BHO)及其在多无人机移动边缘计算与路径规划中的应用(附matlab源代码)

移动边缘计算(Mobile Edge Computing, MEC)通过将计算资源下沉至网络边缘,有效解决了物联网终端设备计算能力不足与能耗受限的问题。无人机(Unmanned Aerial Vehicle, UAV)因其高机动性、灵活部署和广域覆盖等优势,被广泛用作MEC的移动服务器平台。多无人机辅助MEC系统的核心优化问题在于:如何在满足任务处理时延约束和无人机能量限制的前提下,联合优化无人机的三维飞行轨迹、任务卸载决策与计算资源分配,以最小化系统总能耗或最大化任务完成效率。

尘世冰封的专栏 223

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

状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态发生变化时,动态地改变其行为。该模式的核心在于将状态相关的行为封装到独立的状态类中,使得对象的行为随状态而变化,从而减少冗余的条件判断。

慢慢记录,慢慢更新。 2146

PCL 计算点云的体积密度(C++详细过程版)

本文提出了一种基于点云体积密度的计算与可视化方法。算法通过KdTree搜索每个点的邻域,利用球体积公式计算单位体积内的点数作为密度值,并存储在点云强度属性中。代码实现了点云读取、密度计算和可视化功能,使用PCL库完成邻域搜索和密度渲染。结果显示,该方法能有效反映点云密度分布,为后续点云处理提供密度特征参考。文章附有完整C++代码实现和可视化效果图,适用于点云密度分析和特征提取应用。

点云侠的博客 308

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C++】状态模式

状态模式(State Pattern)是一种【行为型】设计模式,它允许对象在其内部状态发生变化时改变其行为,看起来就像该对象改变了它的类一样。这种模式将状态相关的行为封装在独立的状态类中,并将状态转换逻辑集中管理,使系统更易于维护和扩展。

AAADiao的博客 1127

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++设计模式十三--StatePattern(状态模式)

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

雪狼的博客 647

jre9下载 jdk9

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

cpp 状态模式

主要分为三部分1.状态对事件做出反应,并进行状态转移。2.使用状态的对象A接收事件,进行处理。3.外部触发事件向A对象发送事件。

bei9527的博客 287

【c++设计模式23】行为模式8:状态模式(State Pattern)

状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为。状态模式将对象的状态封装成不同的类,并将每个状态抽象为一个接口。当对象的内部状态发生改变时,它会自动切换到相应的状态对象,并执行相应的行为。状态模式将对象的行为和状态解耦,使得状态可以独立变化,而不影响到客户端的代码。

junxuezheng的博客 1089

状态模式(state)C++实现

状态模式(state)C++实现 什么是状态模式 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了这个类 状态模式的主要解决的是,当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断逻辑很简单,就没有必要使用状态模式了 这里对于简单逻辑判断和复杂逻辑判断,大家可以自己考虑,...

shu_chang1993的博客 1617

状态模式C++详解

状态模式C++详解 文章目录状态模式C++详解状态模式由来状态模式c++实现 状态模式由来 面向对象设计其实就是希望做到代码的责任分解(也就是说,将状态设计成类,将责任分离,这个状态应该干嘛干嘛这样)。 状态模式: 当一个对象的内在状态改变的时候,允许其改变行为。 状态模式主要解决的是当控制一个对象状态转移的表达式过于复杂的时候,将状态的判断逻辑转移到表示不同状态的一系列的类当中,可以把复杂的判断逻辑简单化 状态模式c++实现 Context.h #ifndef CONTEXT_H_ #define CO

ahelloyou的博客 735
上一篇: c++函数模板与类模板
下一篇: c++之原型模式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值