Шаблоны State и FlyWeight - PullRequest
       0

Шаблоны State и FlyWeight

3 голосов
/ 04 февраля 2012

Кто-нибудь может поделиться примером использования шаблона состояния с шаблоном flyweight (шаблон flyweight предназначен для создания объектов состояния для экономии памяти)?

UPDATE: Как использовать комбинацию состояний и шаблонов fw?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

Автобокс использует шаблон flyweight, чтобы минимизировать создание объекта (для небольших значений Integer)

Например, для Boolean и Byte все возможные значения кэшируются.

Java использует состояния для многих компонентов, однакоконечный автомат также включает в себя функциональность, переключаемую по состоянию.

Вот пример, который я написал, используя enum http://vanillajava.blogspot.com/2011/06/java-secret-using-enum-as-state-machine.html

1 голос
/ 04 февраля 2012

Я обычно использую шаблон состояния, чтобы избежать условных операторов.

вместо использования:

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

}

т.е. логика перемещается в небольшие классы, которые используются для обработки определенного состояния.Таким образом, вы получаете две вещи:

  • Меньшие классы с четкими обязанностями
  • Меньше условных операторов = более читаемый код.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...