有限状态机(Finite State Machine)定义了一系列状态,对象可以在这些状态之间有条件的转换,并且定义了一个状态机,这个负责管理所有的状态和状态之间的转换条件。一般使用事件来作为转换条件,而具体的转换规则由用户来制定。
看起来跟状态模式有些类似,但其实还是有很大区别的。我们不妨再以小话设计模式(二十)状态模式中的例子为例,看一下二者有什么区别。
有这样一个游戏,主角身体里住着三个灵魂,它可以切换成对应的三种形态,来施放不同的技能。
灵魂声明:
namespace HeroFSM
{
public interface ISoul
{
void CastSkill(Hero hero);
}
public class Mage : TSingleton<Mage>, ISoul
{
public void CastSkill()
{
Console.WriteLine ("Summon a box");
}
}
public class Hunter : TSingleton<Hunter>, ISoul
{
public void CastSkill()
{
Console.WriteLine ("Fire arrow");
}
}
public class Warrior : TSingleton<Warrior>, ISoul
{
public void CastSkill()
{
Console.WriteLine ("Power of Thor");
}
}
}
为了保证每个灵魂只有一个实例,所以我们使用了泛型单例(参考