博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行为型模型 状态模式
阅读量:7113 次
发布时间:2019-06-28

本文共 2336 字,大约阅读时间需要 7 分钟。

行为型模型 状态模式

 

 

Context:用户对象

        拥有一个State类型的成员,以标识对象的当前状态;
State:接口或基类
        封装与Context的特定状态相关的行为;
ConcreteState:接口实现类或子类
        实现了一个与Context某个状态相关的行为。

适用于:

        对象的行为,依赖于它所处的当前状态。行为随状态改变而改变的场景。

 

/** * 行为型模型 状态模式 * State模式也叫状态模式,是行为设计模式的一种。 * State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。 * 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。 * */#define _CRT_SECURE_NO_WARNINGS#include 
#include
// 前置声明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;}

 

转载地址:http://mxghl.baihongyu.com/

你可能感兴趣的文章
nim的引用和指针
查看>>
DirectUI: Become windowless
查看>>
Python 数据结构_队列
查看>>
NAS数据迁移初探
查看>>
打破医院围墙 数字化平台之上的想象力
查看>>
Teradata首席分析官Bill Franks:数据分析变革犹如一场工业革命
查看>>
Linux下安装并使用Java开发opencv的配置
查看>>
AdTime: DMC量身定制的企业数据分析师
查看>>
《数字逻辑设计与计算机组成》一2.3 规范表达式
查看>>
借道大数据 互联网基金再探“蓝海”
查看>>
浙江医疗综合体获批 医疗资源也可共享
查看>>
3G/4G调制解调器曝漏洞:可致设备被完全控制
查看>>
你知道你的Mac摄像头正在偷窥你吗?这款工具或许能帮你
查看>>
超干货!一套完整的设计分析思路应该是怎样的?
查看>>
关于视频流的各种问题,后续整理
查看>>
从零开始,我的上云路
查看>>
MySQL修改密码和加密
查看>>
批处理文件之间的相互调用问题
查看>>
Servlet的Listener的使用
查看>>
Handler学习小结
查看>>