3

任何人都可以分享将状态模式享元模式一起使用的示例(享元模式用于创建状态对象以节省内存)吗?

更新:如何使用状态和 fw 模式的组合?

4

2 回答 2

3

自动装箱使用享元模式来最小化对象创建(对于较小的整数值)

例如,对于 Boolean 和 Byte,所有可能的值都被缓存。

Java 对许多组件使用状态,但是状态机还包括按状态切换的功能。

这是我使用http://vanillajava.blogspot.com/2011/06/java-secret-using-enum-as-state-machine.html编写的示例enum

于 2012-02-04T11:19:37.010 回答
1

我通常使用状态模式来避免条件语句。

而不是使用:

switch (state)
{
    case ParserState.BeforeMethod:
        //do some processing
        break;
    case ParserState.InMethod:
        //do some processing
        break;
}

我可以写:

currentState = currentState.process(context);

示例类可能看起来像

public class SomeClass : ParserState
{
    public ParserState process(IParserContext context)
    {
       //do some proceccing

       if (m_completed)
           return new SomeOtherState();

       return this;
    }

}

即逻辑被移动到用于处理特定状态的小类。所以你得到两件事:

  • 职责明确的小班
  • 更少的条件语句 = 更易读的代码。
于 2012-02-04T10:50:31.063 回答