Шаблон состояния с условным изменением состояния - PullRequest
1 голос
/ 20 февраля 2012

У меня возникли некоторые проблемы с тем, чтобы обернуть голову вокруг одного из аспектов государственной картины. Я понимаю основные примеры, представленные в Википедии и т. Д., Но что, если я в вашем StateContext классе вносим изменения условного состояния, скажем, в таймер, свойственный каждому состоянию?

Так, например, скажем, что наши состояния A, B, C и D. И я хочу изменить состояния на основе таймера состояния. Например, оставайтесь в A в течение 5 секунд, B в течение 7 секунд, C в течение 3 секунд и D в течение 10 секунд.

Кто должен управлять этой продолжительностью? Должен ли каждый штат знать о его продолжительности? В этом случае я чувствую, что мне не нравится копировать и вставлять атрибут _duration в каждое состояние и думаю, что мой интерфейс State должен быть абстрактным базовым классом с этим атрибутом.

Или StateContext должен управлять продолжительностью? В этом случае я чувствую себя неприлично, делая IsInstanceOf проверки моего _state.

1 Ответ

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

Ни StateContext, ни State не отвечают за управление изменениями состояния, это что-то, управляемое извне этого шаблона. Вероятно, у вас должен быть метод setState(...) или другой метод для изменения текущего экземпляра State в вашем классе StateContext.

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