用 State Pattern 来实现一个简单的 状态机
首先要理解 State Pattern 模式。
http://www.dofactory.com/net/state-design-pattern
Definition
UML class diagram
![](http://www.dofactory.com/images/diagrams/net/state.gif)
Participants
The classes and objects participating in this pattern are:
- Context (Account)
- defines the interface of interest to clients
- maintains an instance of a ConcreteState subclass that defines the current state.
- State (State)
- defines an interface for encapsulating the behavior associated with a particular state of the Context.
- Concrete State (RedState, SilverState, GoldState)
- each subclass implements a behavior associated with a state of Context
先画个状态机用来接收和处理数据。
开始定义Base状态和各个状态
public abstract class StateBase{public abstract void Enter(Monitor context);public virtual void Exit(Monitor context){Console.WriteLine("Exiting current state: {0}", context.CurrentState.StateName); }public string StateName{get;set;}}
public class ConnectState : StateBase{public ConnectState(){this.StateName = "Connect"; }public override void Enter(Monitor context){Console.WriteLine("Enter - {0}", context.CurrentState.StateName);context.MoveToNextState(new ReceiveDataState()); }}
Create a context class, and set initial state to start running.
public class Monitor{public Monitor(){}public void MoveToNextState(StateBase nextState){Console.WriteLine("Changing state...");this.CurrentState.Exit(this);this.CurrentState = nextState;this.CurrentState.Enter(this); }public void Start(){this.CurrentState = new NotStartState();this.CurrentState.Enter(this); }public StateBase CurrentState{get;set;}
开始使用状态机
static void Main(string[] args){Monitor m = new Monitor();m.Start(); }
转载于:https://www.cnblogs.com/fdyang/p/7127005.html
用 State Pattern 来实现一个简单的 状态机相关推荐
- 一个简单的状态机设计
- php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...
- C#设计模式(19)——状态者模式(State Pattern)
原文:C#设计模式(19)--状态者模式(State Pattern) 一.引言 在上一篇文章介绍到可以使用状态者模式和观察者模式来解决中介者模式存在的问题,在本文中将首先通过一个银行账户的例子来解释 ...
- linux下glew例子,一个简单的GLSL Shader例子
本例子选自OpenGL Shading Language中的第一个Shader例子,使用颜色平滑地表示一个表面的温度.温度及其颜色的范围在应用程序中进行设置. //先看顶点着色器temp.vert: ...
- Linux内核分析:完成一个简单的时间片轮转多道程序内核代码
PS.贺邦 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 1.m ...
- 一个简单案例教你如何用Typescript写Vuex
案例源代码: github.com/danielhuoo/- 前言 相信很多人都像我一样,学习使用了vuex后,想把项目改写成Typescript.但是官方教程要么晦涩难懂,要么缺少鲜活的例子.我花了 ...
- linux内核计算代码时间,完成一个简单的时间片轮转多道程序内核代码
<Linux 内核分析>实验二:How Does a Operating System Work? 1.函数调用堆栈和中断 在上一节实验中我们已经明白了,存储程序计算机的运行原理,就是通过 ...
- 用java写一个简单的区块链(下)
用java写一个简单的区块链(下) 2018年03月29日 21:44:35 java派大星 阅读数:725 标签: 区块链java 更多 个人分类: 区块链 版权声明:本文为博主原创文章,转载请标明 ...
- 一个简单的blog系统(十一) 增加文章检索功能
一个简单的blog系统(十一) 增加文章检索功能 1. 现在,我们就来给博客添加文章检索功能.假定,可以根据关键字魔木查询文章标题,也就是说支持正则表达式,而且字母不会区分大小写. 1.1 首先,我们 ...
最新文章
- Git-remote Incorrect username or password ( access token )
- NLP数据科学家不会告诉你的残酷事实
- 只会python好找工作吗-python真的不好找工作吗?
- nginx+awstats多域名日志分析2
- C++实现插值查找(附完整源码)
- jsTree通过json数据初始化时,如何控制每个选项的图标(icon)显示
- spring boot 会默认加载DataSourceAutoConfiguration这个类
- 服务器生成文件怎么配置路径,npm run build生成的文件如何部署到服务器上
- 神经网络基本原理简明教程-0-Python-Numpy库的点滴
- VUE2 第五天学习--过渡效果
- 不同分支设置不同的远程仓库
- 『商务口语』2010.01.11--你要在这里停留多久?
- torch中的几种乘法。torch.mm, torch.mul, torch.matmul
- 2005年计算机课程,2005年暑期非计算机专业计算机基础课程教学研讨会成功举办...
- Kubernetes Job Controller源码分析
- paip.c语言gtk开发环境CodeBlocks /QT建立最佳实践
- 动易cms聚合空间最近访客访问地址错误解决方法
- wmware 安装xp系统虚拟机
- 【MATLAB】用MATLAB编写阶乘函数,并调用该函数来生成一个1!,...,10!的阶乘表。
- Linux cd命令cd、 cd ~、cd /、cd../、cd /home讲解
热门文章
- 开源 | 近期遥感航空影像的检索、检测、跟踪、计数、分类相关工作
- Pandas-Series知识点总结
- vue 新建的页面如何访问_Vue.js—实现前后端分离架构中前端页面搭建(四)(完)...
- c++ list 获取元素_Python中最常见的10个问题(list)
- list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II
- .net core json 为null输出_SpringBoot实战(九):标准化json返回值
- 最常用的 HTTP 方法:GET 和 POST
- linux服务器时间乱码问题解决
- 广州测试沙龙的问题。
- $(document).ready和window.onload的区别