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

《状态模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


模式说明

  • 方案:状态模式是一种行为设计模式,用于在对象的内部状态发生改变时改变其行为。它包括三个关键角色:上下文(Context)、抽象状态(State)、具体状态(ConcreteState)。上下文负责维护一个状态对象,并在需要时委托给具体状态对象执行行为。抽象状态定义了一个接口,用于封装特定状态下的行为。具体状态实现了抽象状态定义的接口,并定义了特定状态下的行为。
  • 优点:将状态转换的逻辑封装在状态类中,使得状态间的切换更加简单,避免了大量的条件语句。将相关行为组织在一起,增强了代码的可维护性和可扩展性。
  • 缺点:增加了类和对象的数量,可能会导致系统更加复杂。

本质思想: 状态模式的本质是将对象的状态抽象为一个独立的类,使得对象在不同状态下有不同的行为,并且能够动态地切换状态。

实践建议:在实际开发中,状态一般用一个变量表示就够了,很少会抽象成一个类。如果,状态需要多个变量表示,且此类状态有固定的方法,则可以使用状态模式。这里封装的是当前状态,以及状态附属的行为。另外,不管是“状态类”作为参数传给“上下文类”执行,还是“上下文类”传给”状态类“执行,没有本质的区别。

代码示例

#include <iostream>// 抽象状态类
class State {
public:virtual void handle() = 0;
};// 具体状态类
class ConcreteStateA : public State {
public:void handle() override {std::cout << "State A handled." << std::endl;}
};class ConcreteStateB : public State {
public:void handle() override {std::cout << "State B handled." << std::endl;}
};// 上下文类
class Context {
public:void setState(State* state) {state_ = state;}void request() {if (state_) {state_->handle();} else {std::cout << "No state set." << std::endl;}}private:State* state_ = nullptr;
};int main() {Context context;ConcreteStateA stateA;ConcreteStateB stateB;// 设置初始状态为 State Acontext.setState(&stateA);context.request(); // 输出:State A handled.// 切换状态为 State Bcontext.setState(&stateB);context.request(); // 输出:State B handled.return 0;
}

http://www.lryc.cn/news/333135.html

相关文章:

  • Day4-Hive直播行业基础笔试题
  • mybatis批量新增数据
  • webrtcP2P通话流程
  • 游戏引擎中的物理系统
  • 【C++ STL有序关联容器】map 映射
  • 【ZZULIOJ】1041: 数列求和2(Java)
  • C++【适配器模式】
  • go | 上传文件分析 | http协议分析 | 使用openssl 实现 https 协议 server.key、server.pem
  • Chatgpt掘金之旅—有爱AI商业实战篇|专业博客|(六)
  • 单例模式 JAVA
  • C++从入门到精通——初步认识面向对象及类的引入
  • GitHub入门与实践
  • centos 安装 stable-diffusion 详细流程
  • CSS编写登录框样式
  • Python|OpenCV-获取鼠标点击位置的坐标,并绘制图像(13)
  • 设计模式(14):命令模式
  • 关于阿里云云数据库自动扩缩容和自动SQL优化的20道面试题
  • mkcert生成ssl证书+nginx部署局域网内的https服务访问问题
  • PTA C 1050 螺旋矩阵(思路与优化)
  • 神经网络分类和回归任务实战
  • 【数据结构】考研真题攻克与重点知识点剖析 - 第 4 篇:串
  • 深入浅出 -- 系统架构之分布式多形态的存储型集群
  • STL —— list
  • 申请SSL证书
  • 深入浅出 -- 系统架构之负载均衡Nginx环境搭建
  • notepad++绿色版添加右键菜单
  • 7 个 iMessage 恢复应用程序/软件可轻松恢复文本
  • DockerFile启动jar程序
  • 基于R、Python的Copula变量相关性分析及AI大模型应用
  • 鸿蒙组件学习_Tabs组件