行为型模型 状态模式
行为型模型 状态模式
Context:用户对象
拥有一个State类型的成员,以标识对象的当前状态;
State:接口或基类
封装与Context的特定状态相关的行为;
ConcreteState:接口实现类或子类
实现了一个与Context某个状态相关的行为。
适用于:
对象的行为,依赖于它所处的当前状态。行为随状态改变而改变的场景。
/** * 行为型模型 状态模式 * State模式也叫状态模式,是行为设计模式的一种。 * State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。 * 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。 * */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> // 前置声明 class Context; class State { public: virtual void doAction(Context * context) = 0; virtual std::string toString() = 0; virtual ~State() {} }; class Context { public: Context() { state = nullptr; } void setState(State * state) { this->state = state; } State * getState() { return state; } void doAction() { if ( state == nullptr ) { std::cout << "None state" << std::endl; } else { state->doAction(this); } } private: State * state; }; class StartState: public State { public: virtual void doAction(Context * context) override { if (context->getState() == nullptr) { std::cout << "None start state" << std::endl; } else { std::cout << context->getState()->toString() << ": Player is in start state" << std::endl; } } virtual std::string toString() override { return "Start State"; } }; class StopState: public State { public: virtual void doAction(Context * context) override { if (context->getState() == nullptr) { std::cout << "None stop state" << std::endl; } else { std::cout << context->getState()->toString() << ": Player is in stop state" << std::endl; } } virtual std::string toString() override { return "Stop State"; } }; void mytest() { Context * context = new Context(); StartState * startState = new StartState(); StopState * stopState = new StopState(); context->doAction(); context->setState(startState); context->doAction(); context->setState(stopState); context->doAction(); delete stopState; stopState = nullptr; delete startState; startState = nullptr; delete context; context = nullptr; return; } int main() { mytest(); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南