FSM和STATE模式

转载 2010年06月03日 11:07:00

三种状态( A B C )三种操作( ON OFF ACK

 

ON(0)

OFF(1)

ACK(2)

A(0)

A

B

C

B(1)

B (未定义)

A

C

C(2)

C (未定义)

C (未定义)

B

其中ABC三种状态和ON OFF ACK三种转化操作,下面代码给出了STATE模式的基本实现过程,一般而言,状态机的设计分为两大部分,FSM中包含所有状态转化的操 作,FSMstate是所有状态的基类,该类中包含所有的状态迁移操作,其子类实现了不同的状态迁移,通过多态可以实现相同的操作实施在不同状态时转化。

#include<iostream >

 

using namespace std ;

 

class FSMstate

{

public :

         virtual void on () { cout << "undefined combo" << endl ; }

         virtual void off () { cout << "undefined combo" << endl ; }

         virtual void ack () { cout << "undefined combo" << endl ; }

};

 

class FSM

{

public :

         FSM ();

         void on ()

         {

                   states [ current ]-> on ();

                   current = next [ current ][0];

         }

         void off ()

         {

                   states [ current ]-> off ();

                   current = next [ current ][1];

         }

         void ack ()

         {

                   states [ current ]-> ack ();

                   current = next [ current ][2];

         }

private :

         FSMstate * states [3];

         int current ;

         int next [3][3];

};

 

class A : public FSMstate

{

public :

         void on () { cout << "A, on ==> A" << endl ; }

         void off () { cout << "A, off ==> B" << endl ; }

         void ack () { cout << "A, ack ==> C" << endl ; }

};

 

class B : public FSMstate

{

public :

         void off () { cout << "B, off ==> A" << endl ; }

         void ack () { cout << "B, ack ==> C" << endl ; }

};

 

class C : public FSMstate

{

         void ack () { cout << "C, ack ==> B" << endl ; }

};

 

FSM :: FSM ()

{

// 三种状态

         states [0] = new A ;

         states [1] = new B ;

         states [2] = new C ;

// 当前状态

         current = 1;

// 描述状态转换的数组

         next [0][0] = 0; next [0][1] = 1; next [0][2] = 2;

         next [1][0] = 1; next [1][1] = 0; next [1][2] = 2;

         next [2][0] = 2; next [2][1] = 2; next [2][2] = 1;

}

 

enum Message { On , Off , Ack };

Message   messageArray [10] = { On , Off , Off , Ack , Ack , Ack , Ack , On , Off , Off };

 

void main ()

{

         FSM fsm ;

         for ( int i = 0; i < 10; i ++ )

         {

                   if ( messageArray [ i ] == On ) fsm . on ();

                   else if ( messageArray [ i ] == Off ) fsm . off ();

                   else if ( messageArray [ i ] == Ack ) fsm . ack ();

         }

}

 

使用样式表控制IE5.5浏览器中滚动条

自从DHTML出现以来,微软对DHTML功能的加强就没有停止过,在微软最新的游览器Internet Explorer 5.5的的IE5.5增加了许多新的样式表内容,对滚动条的样式进行修改也是其中之一,...
  • linyu
  • linyu
  • 2000-11-23 14:19:00
  • 1204

有限状态机(FSM)设计原理

1.1 概述  有限状态机是由寄存器组和组合逻辑构成的硬件时序电路。有限状态机的状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态。 ...
  • Pieces_thinking
  • Pieces_thinking
  • 2017-07-26 11:15:19
  • 1426

有限状态机(FSM)

Finite State Machine(FSM)是一种人工智能的实现方式,对象在不同的状态间转换,且某一时刻只能处于一个状态;FSM中对象的行为是由我们自己设置的流程, 在加入消息功能后, 不同对象...
  • bbhe_work
  • bbhe_work
  • 2015-11-17 12:12:23
  • 322

FSM和STATE模式

 FSM可以使用说明图表或状态转换图)。最共同的表示法如下所示: 现状(b)和情况(y)的组合显示下个状态(c)。 完成信息可以使用脚注仅增加的行动。 一个FSM定义包括全部行动信息和可能使用的状态 ...
  • nette
  • nette
  • 2007-09-01 09:36:00
  • 696

state模式

  • 2007年08月18日 22:45
  • 1KB
  • 下载

使用状态模式(state pattern)替代if else

http://www.blogjava.net/xzclog/archive/2006/10/16/75399.html
  • liuyukuan
  • liuyukuan
  • 2014-05-28 21:35:05
  • 889

Akka FSM 源码分析

Akka FSM 源码分析 萧猛 simonxiao@qq.com> Table of Contents 啰嗦几句实现有限状态机的关键点Akka FSM 实现 术语约定状态机的装配机制...
  • twoface
  • twoface
  • 2014-06-18 10:11:12
  • 2146

设计模式学习笔记--Strategy、State

最近在看设计模式的,防止遗忘,总结一下,如有不足还望指正! 策略模式:(strategy)定义算法家族,分别封装起来,让他们之间可以相互替换。此模式可以让算法的变化,不影响使用算法的用户。 类图如下:...
  • smartboy_01
  • smartboy_01
  • 2014-12-30 22:32:36
  • 587

C++状态模式详解--设计模式(15)

State模式来源:        每个人、事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下转移到下一个不同的状态(State)。最简单的一个生活中的例子就是:地铁入口处,如果你放...
  • fanyun_01
  • fanyun_01
  • 2016-07-01 08:51:21
  • 1668

Unity3D有限状态机(FSM)学习笔记【7】使用实例

本系列笔记转载自游戏蛮牛专栏作家Jackel的论坛文章,详细介绍了FSM的创建与使用,特与众分享。链接:http://www.manew.com/thread-37136-1-1.html 一、实例...
  • yuxikuo_1
  • yuxikuo_1
  • 2015-08-30 21:03:18
  • 1576
收藏助手
不良信息举报
您举报文章: FSM和STATE模式
举报原因:
原因补充:

(最多只允许输入30个字)