3

フライウェイトパターンでステートパターンを使用する例を誰かが共有できますか(フライウェイトパターンは、メモリを節約するためにステートオブジェクトを作成するためのものです)?

更新:状態パターンとfwパターンの組み合わせを使用するにはどうすればよいですか?

4

2 に答える 2

3

オートボクシングはフライウェイトパターンを使用して、オブジェクトの作成を最小限に抑えます(整数の値が小さい場合)

たとえば、ブール値とバイト値の場合、すべての可能な値がキャッシュされます。

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;
    }

}

つまり、ロジックは、特定の状態を処理するために使用される小さなクラスに移動されます。したがって、2つのことが得られます。

  • 明確な責任を持つ少人数のクラス
  • 条件文が少ない=コードが読みやすくなります。
于 2012-02-04T10:50:31.063 に答える