#pragma once
#include "stdafx.h"#include <queue>
#include<iostream>
using namespace std;//设计模式-状态模式State
/*
当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就是改变了类。
*/class CContexct;class CState {//抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。
public:virtual void Handle(CContexct *pContext) = 0;
};class CContexct {//维护一个concretestate子类的实例,这个实例定义当前的状态。
private:CState *m_pState;queue<CState *>m_qHashMemory;
public:CContexct(CState *pState) {while (!m_qHashMemory.empty()) {m_qHashMemory.pop();}m_pState = pState;m_qHashMemory.push(m_pState);}~CContexct() {while (!m_qHashMemory.empty()) {delete m_qHashMemory.front();m_qHashMemory.pop();}}void SetContext(CState *pState) {m_pState = pState;m_qHashMemory.push(m_pState);}void Request() {m_pState->Handle(this);}
};class CConcreteStateC :public CState {//具体状态,每一个子类实现一个与Context的一个状态相关的行为。
public:void Handle(CContexct *pContext) {cout << "over" << endl;return;}
};class CConcreteStateB : public CState {
public:void Handle(CContexct *pContext) {pContext->SetContext(new CConcreteStateC());pContext->Request();}
};class CConcreteStateA : public CState {
public:void Handle(CContexct *pContext) {pContext->SetContext(new CConcreteStateB());pContext->Request();}
};int main() {CContexct *pContexct = new CContexct(new CConcreteStateA());pContexct->Request();delete pContexct;getchar();return 0;
}

设计模式复习-状态模式相关推荐

  1. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  2. java设计模式之状态模式_Java中的状态设计模式

    java设计模式之状态模式 在本教程中,我们将探讨另一种流行的行为设计模式-状态设计模式. 当我们使用可以存在于多个状态的对象时,状态设计模式的知识变得非常有用. 当对象的行为取决于其当前状态时,我们 ...

  3. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  4. 图解java多线程设计模式 pdf_图解Java设计模式之状态模式

    图解Java设计模式之状态模式 APP抽象活动问题 状态模式基本介绍 状态模式的原理类图 状态模式解决APP抽奖问题 状态模式的注意事项和细节 APP抽象活动问题 请编写程序完成APP抽象活动,具体要 ...

  5. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  6. python的out模式_Python设计模式之状态模式

    状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机 ...

  7. 码农小白 设计模式篇 状态模式

    码农小白 设计模式篇 状态模式 1.状态的认识 2.面向过程思维的代码实现 小结: 3.面向对象实现 小结 4.用状态模式实现 1.状态模式的简介 2.状态模式的好处 3.状态模式的使用 4.代码实现 ...

  8. 设计模式之状态模式(State)

    什么是状态? 我们在购物网站进行购物时,订单会产生几种状况:已下单.已付款.送货中.确定收货等状态. 所以系统会判断该订单的状态,不管是哪种状态都应给出对应的操作,这就是状态. 什么是状态模式? 在软 ...

  9. PHP设计模式之状态模式定义与用法详解

    本文实例讲述了PHP设计模式之状态模式定义与用法.分享给大家供大家参考,具体如下: 什么是状态设计模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当 ...

最新文章

  1. 信息科学部鼓励科学家更多瞄准“原创”研究
  2. PHP大文件分片上传
  3. ES中如何使用逗号来分词
  4. RabbitMq、ActiveMq、ZeroMq、kafka比较
  5. data access components 2.0未响应_Vue2.x 源码剖析之响应式原理
  6. Java并发编程实战读书笔记合集
  7. 关于Arduino下载并添加DHT11库文件的详细教程
  8. html如何设置自动点击事件,html 如何设置打开网页时自动触发按钮的单击事件
  9. http://www.jb51.net/article/84149.htm
  10. 微医在港招股书失效:曾多次喊话上市,注册用户达2.2亿
  11. 普通最小二乘法平面直线回归问题的三种实现(Python)
  12. 广东中考可以用计算机吗,广州中考改革迎五大变革:中考禁用计算机 详细新政一览...
  13. 栈的压入序列和弹出序列是否匹配
  14. 再度递表港交所,“快”能否成为绿茶餐厅突围的筹码?
  15. 网闸虚拟服务器,tcp客户端和tcp服务器端 网闸
  16. 替换MP9486A 替代MP4689 替换LM5007 LM5017 国产芯片内置150V做降压恒压4.2V GPS防盗器专用芯片
  17. 趣题:奇怪的自然数集划分
  18. python:实现图像去雾算法(附完整源码)
  19. 大数据在电力行业的应用案例100讲(十七)-基于微服务架构的营配贯通设计
  20. 20170118Capstone训练营

热门文章

  1. 吴恩达:现在很多所谓的AI公司,其实都不是AI公司
  2. 投资互联网+企业级IT呈现三大新趋势
  3. python(40):利用utf-8编码判断中文英文字符
  4. 4.AngularJS四大特征之二: 双向数据绑定
  5. item的常用类型上
  6. 基于TCP协议的socket通信
  7. C语言笔记系列文章 索引目录表(持续更新中......)
  8. PTA第二个编程题总结
  9. SpringBoot框架与MyBatis集成,连接Mysql数据库
  10. 关闭360浏览器广告(广告洁癖)