设计模式之抽象状态模式
【定义】当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
【场景】比如看一场电影,有以下状态 买票状态:等待进场验票,进场状态:等待电影开始;看电影状态:等待电影结束;出场状态:等待下一场电影 ;
【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的杰作 * 葡萄和西红柿是 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...
- 设计模式复习-抽象工厂模式
设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...
- 设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- 【游戏设计模式】之三 状态模式、有限状态机
转载自:https://blog.csdn.net/poem_qianmo/article/details/52824776 游戏开发过程中,各种游戏状态的切换无处不在.但很多时候,简单粗暴的if e ...
- 【游戏设计模式】之三 状态模式、有限状态机 Unity版本实现
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅 ...
- 【游戏设计模式】之三 状态模式 有限状态机 Unity版本实现
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星 ...
- 设计模式之略见一斑(状态模式State)
设计模式中的状态模式相对比较简单,简单的说就是对某个对象的状态进行管理.对象的状态如果的多的话,假如没有对其进行管理,极易造成管理混乱.从而使系统难以维护,所以State模式的意图就是将与状态有关的处 ...
最新文章
- OVS原理(四十二)
- c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)
- 外键约束 mysql
- 初识 ::after
- java weblogic admin,weblogic admin 不能重起服务(Server may already be running)
- python常见的数据结构
- 如何用U盘安装Windows操作系统
- URL编码与中文相互转换
- python连接MongoDB
- python创建ppt_ppt自动化创建工具——python-pptx
- 小米手机v3.exo 合并_eXo发布Web Content Management 2.0作为开源
- 20170328_C++程序员必备的20个知识点——部分2
- 0x0000007B:A problem has been detected and windows has been shut down to prevent damage to your Comp
- 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
- java -io字符流FileWrite操作演示
- 19年NAACL纪实:自然语言处理的实用性见解
- php字典遍历,OC中的遍历数组和字典
- RegExp——正则表达式
- UEM“探针”技术及用户体验管理
- 手机视频用计算机,如何用手机通过无线wifi直接播放电脑里的视频
热门文章
- mysql too many connection解决方法
- Gstreamer官方教程汇总2---GStreamer concepts
- 用arp-scan扫描局域网IP地址
- grub引导程序适用范围
- eWebEditor浏览器兼容 ie8 ie7
- Cisco ppp链路单双认证
- StringBuilder使用方法
- Redis 6.0 源码阅读笔记(5) -- List 数据类型源码分析
- python字典变量定义_Python字典,函数,全局变量代码解析
- 定义struct出错指针不允许指向不完整类型_Go入门系列(三)复合数据类型