州模式:为什么国家不是单身人士?

Mar*_*coS 1 java state design-patterns

我使用State模式来实现一个简单的有限状态机.看一下维基百科上给出的描述,更具体地说是建议的Java实现,我想知道为什么实现State接口的类(即各种状态)不是单例?

在建议的实现中,每当发生转换时都会创建一个新状态.但是,一个对象足以代表每个状态.那么,为什么每次发生转换时都会浪费时间创建一个新实例?

Mat*_*ell 10

因为每个州都可以存储实例变量?

看一下您参考的维基百科示例:

class StateB implements State { 
    private int count=0; 
    public void writeName(StateContext stateContext, String name) { 
        System.out.println(name.toUpperCase()); 
        if(++count>1) { 
            stateContext.setState(new StateA()); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你能看到它如何存储输入次数的计数吗?

现在,在FSM中,您可能希望每个状态都是幂等的(后续调用给出相同的反馈),但State模式更通用.维基百科页面上描述的一个目标用途是:

对象在运行时部分更改其类型的简洁方法

由于大多数对象在执行操作时可能使用其局部变量,因此您还希望"更改类型"版本也使用局部变量.