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

【场景】比如看一场电影,有以下状态 买票状态:等待进场验票,进场状态:等待电影开始;看电影状态:等待电影结束;出场状态:等待下一场电影 ;

【UML】

【代码】

#include <iostream>using namespace std;class SeeFilm;class State
{
public:virtual void ChangeState(SeeFilm* seeFilm) = 0;virtual void ShowState() = 0;
};class SeeFilm
{
private:State* state;
public:void SetState(State* s){delete state;if(NULL != s){state = s;state->ShowState();}}void ChangeState(){state->ChangeState(this);}
};class StateFilmOver : public State
{
public:virtual void ChangeState(SeeFilm* seeFilm){seeFilm->SetState(NULL);}virtual void ShowState(){cout<<"Current State: StateFilmOver"<<endl;}
};class StateSeeFilm : public State
{
public:virtual void ChangeState(SeeFilm* seeFilm){seeFilm->SetState(new StateFilmOver());}virtual void ShowState(){cout<<"Current State: StateSeeFilm"<<endl;}
};class StateWaitFilm : public State
{
public:virtual void ChangeState(SeeFilm* seeFilm){seeFilm->SetState(new StateSeeFilm());}virtual void ShowState(){cout<<"Current State: StateWaitFilm"<<endl;}
};class StateGetTicket : public State
{
public:virtual void ChangeState(SeeFilm* seeFilm){seeFilm->SetState(new StateWaitFilm());}virtual void ShowState(){cout<<"Current State: StateGetTicket"<<endl;}
};int main()
{SeeFilm* seeFilm = new SeeFilm();State* state = new StateGetTicket();seeFilm->SetState(state);seeFilm->ChangeState();seeFilm->ChangeState();seeFilm->ChangeState();delete seeFilm;return 0;
}

转载于:https://www.cnblogs.com/WIT-Evan/archive/2012/07/18/7291488.html

设计模式之抽象状态模式相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 【游戏设计模式】之三 状态模式、有限状态机

    转载自:https://blog.csdn.net/poem_qianmo/article/details/52824776 游戏开发过程中,各种游戏状态的切换无处不在.但很多时候,简单粗暴的if e ...

  8. 【游戏设计模式】之三 状态模式、有限状态机 Unity版本实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅 ...

  9. 【游戏设计模式】之三 状态模式 有限状态机 Unity版本实现

     本系列文章由@浅墨_毛星云 出品,转载请注明出处.    文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776  作者:毛星 ...

  10. 设计模式之略见一斑(状态模式State)

    设计模式中的状态模式相对比较简单,简单的说就是对某个对象的状态进行管理.对象的状态如果的多的话,假如没有对其进行管理,极易造成管理混乱.从而使系统难以维护,所以State模式的意图就是将与状态有关的处 ...

最新文章

  1. OVS原理(四十二)
  2. c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)
  3. 外键约束 mysql
  4. 初识 ::after
  5. java weblogic admin,weblogic admin 不能重起服务(Server may already be running)
  6. python常见的数据结构
  7. 如何用U盘安装Windows操作系统
  8. URL编码与中文相互转换
  9. python连接MongoDB
  10. python创建ppt_ppt自动化创建工具——python-pptx
  11. 小米手机v3.exo 合并_eXo发布Web Content Management 2.0作为开源
  12. 20170328_C++程序员必备的20个知识点——部分2
  13. 0x0000007B:A problem has been detected and windows has been shut down to prevent damage to your Comp
  14. 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
  15. java -io字符流FileWrite操作演示
  16. 19年NAACL纪实:自然语言处理的实用性见解
  17. php字典遍历,OC中的遍历数组和字典
  18. RegExp——正则表达式
  19. UEM“探针”技术及用户体验管理
  20. 手机视频用计算机,如何用手机通过无线wifi直接播放电脑里的视频

热门文章

  1. mysql too many connection解决方法
  2. Gstreamer官方教程汇总2---GStreamer concepts
  3. 用arp-scan扫描局域网IP地址
  4. grub引导程序适用范围
  5. eWebEditor浏览器兼容 ie8 ie7
  6. Cisco ppp链路单双认证
  7. StringBuilder使用方法
  8. Redis 6.0 源码阅读笔记(5) -- List 数据类型源码分析
  9. python字典变量定义_Python字典,函数,全局变量代码解析
  10. 定义struct出错指针不允许指向不完整类型_Go入门系列(三)复合数据类型