Есть ли недостаток дизайна, когда состояние объекта не полностью использует enter (), execute () и exit ()?

9

Я слежу за искусственным интеллектом Mat Buckland по программированию на примере и обнаружил, что не всегда могу использовать enter (), execute () и exit () в состоянии объекта. Например, в RPG оружие может иметь экипированное состояние, и я могу использовать enter () и exit () для этого состояния, чтобы добавить или вычесть модификатор способности игрока, но на самом деле нет необходимости выполнять ( ). Это недостаток дизайна в моем двигателе или недостаток этого подхода?

Charanor
источник

Ответы:

8

Не читая книгу, эти звонки звучат как обычные точки входа для конечного автомата. Чтобы понять звонки, давайте посмотрим, что они делают.

enter () - выполняется, когда состояние активировано.

execute () - выполняется, пока состояние активировано.

exit () - выполняется, когда состояние деактивировано.

Они подходят для любого типа конечного автомата. Некоторым машинам нужны только вызовы «execute», другим - «enter» и «exit», а третьим - все три.

Пример 1 : Пулеметный курок.

  • Выполнить: стрелять пулями с заданной скоростью.

Пример 2 : Силовой мост

  • Enter: заставить мост появиться
  • Выход: заставить мост исчезнуть

Пример 3 : Личная силовая броня.

  • Enter: дать игроку дополнительную защиту
  • Выполнить: разряжать аккумуляторы
  • Выход: снять дополнительную защиту
Яри ​​Комппа
источник
8

Это не обязательно признак какого-либо недостатка. Не каждый объект или состояние будет иметь применение для каждого доступного метода. Просто оставьте метод execute () пустым, хорошо, IMO.

Натан Рид
источник