State和FlyWeight模式

时间:2012-02-04 09:52:36

标签: java design-patterns

是否可以与state pattern分享使用flyweight pattern的示例(flyweight模式用于创建状态对象以节省内存)?

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

2 个答案:

答案 0 :(得分:3)

Autoboxing使用flyweight模式来最小化对象创建(对于较小的Integer值)

e.g。对于布尔值和字节,所有可能的值都被缓存。

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

以下是我使用enum http://vanillajava.blogspot.com/2011/06/java-secret-using-enum-as-state-machine.html

撰写的示例

答案 1 :(得分: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;
    }

}

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

  • 责任明确的小班级
  • 较少的条件陈述=更易读的代码。