状态模式

状态模式UML

状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

#pragma once
#include <iostream>
#include <vector>
#include <string>
#include <Windows.h>using namespace std;class Context;//抽象状态类
class State
{public:virtual void Handle(Context& con) = 0;
};//当前状态类
class Context
{public:Context(State* s){//初始化最初状态stat = s;//初始化最初时间minute = 0;}void setState(State* s){if ((NULL != s) && (NULL != stat)){delete stat;stat = s;}}void setMinute(int m){minute = m;}int getMinute(){return minute;}void showCurrentState(){stat->Handle(*this);}
private:State* stat;int minute;
};//具体状态3
class Thirt_State : public State
{public:virtual void Handle(Context& con){if (con.getMinute() < 10)cout << "风暴龙王刷新" << endl;else{cout << "当前时间状态出错" << endl;}}
};//具体状态2
class Second_State : public State
{public:virtual void Handle(Context& con){if (con.getMinute() < 5)cout << "小龙刷新" << endl;else{con.setState(new Thirt_State);con.showCurrentState();}}
};//具体状态1
class First_State : public State
{public:First_State() {}virtual void Handle(Context& con){if (con.getMinute() < 0.5)cout << "红蓝buff刷新" << endl;else{con.setState(new Second_State);con.showCurrentState();}}
};int main()
{First_State* stat = new First_State;Context con(stat);con.showCurrentState();con.setMinute(4);con.showCurrentState();con.setMinute(8);con.showCurrentState();system("pause");return 1;
}

使用场景

1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

上buff——状态模式相关推荐

  1. 【地铁上的设计模式】--行为型模式:状态模式

    什么是状态模式 状态模式是一种行为模式,它允许对象在其内部状态发生改变时改变其行为.在状态模式中,将状态定义为独立的对象,并将对象在不同状态下的行为委托给具有相应行为的状态对象.当对象的状态发生变化时 ...

  2. 状态模式 处理订单状态_将状态机模式实现为流处理器

    状态模式 处理订单状态 在我的上一个博客中,我说过我真的以为某些"四人行"(GOF)模式已经过时了,如果不是过时的话肯定不受欢迎. 特别是我说过StateMachine没什么用,因 ...

  3. 设计模式之状态模式(State)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  4. else 策略模式去掉if_设计模式(三)——简单的状态模式代替if-else

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长. 前言 大多数开发人员现在还在使用if else的过 ...

  5. 【设计模式】 模式PK:策略模式VS状态模式

    1.概述 行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下. 策略模式(左)和状态模式(右)的通用类图. 两个类图非常相似,都是通过Cont ...

  6. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  7. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  8. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)

    说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对"状态模式"并不陌生,因为我们之前使用到了状态模式进行 ...

  9. 状态模式在领域驱动设计中的使用

    领域驱动设计是软件开发的一种方式,问题复杂的地方通过将具体实现和一个不断改进的核心业务概念的模型连接解决.这个概念是Eric Evans提出的,http://www.domaindrivendesig ...

最新文章

  1. 多线程中的ManualResetEvent
  2. 如何使用CSS创建巧妙的动画提示框
  3. 《SAS编程与数据挖掘商业案例》学习笔记之十七
  4. Wireshark图解教程(简介、抓包、过滤器)
  5. 最长非单调增序列(最长非单调增序列,,要用N*LOG N(非常值得琢磨的算法。)...
  6. 《Windows服务器配置与管理》远程桌面管理
  7. Spring集成Quartz定时任务 ---- 定时执行
  8. Android NDK JNI C++ 3
  9. 多个点 最远距离 java_Java实现的计算最大下标距离算法示例
  10. mongo之$group+$addToSet
  11. 将log4j重定向到指定函数
  12. Android 文本监听接口TextWatcher详解
  13. 【技能】快递管家无需开发集成金蝶云星辰示例
  14. 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA ) ★★
  15. OSChina 周五乱弹 —— 美团外卖程序崩溃的真相
  16. OpenJudge -6047 :分蛋糕
  17. 检验样本是否服从泊松分布
  18. C++ 11基本语法及基本算法
  19. 今日锋评:愚人节的秘密
  20. 《智慧识人术》读书笔记

热门文章

  1. android service拦截按键,android里面屏蔽home键/禁止Home键或者随你DIY
  2. c语言兔子序列第8年不繁殖,基于链表的兔子序列生成研究.pdf
  3. 信道检测手机软件 ios_【安卓+iOS】卧龙影视,老牌观影神器上架苹果TF版,支持双端,限时下载!...
  4. 【食品化学与营养】第一章 绪论 笔记
  5. 弹性碰撞后速度方向_高中物理竞赛典型例题精讲——垫圈弹性碰撞后速度方向...
  6. 为你推荐10款开发常用的代码编辑器
  7. Java开发游戏项目-用java语言做的超级玛丽
  8. Cadence 怎么给shape倒角
  9. Mplayer完美安装手册(转)
  10. 【Unity3D】学习笔记(第2记) 2D游戏开发基本技巧之背景制作