Класс стратегии заключает в себе действие, а не вещь. Так что, хотя вы могли бы, если бы вам это действительно нужно, было бы бессмысленно сохранять в этом состояние. Думайте об этом как глагол, а не как существительное. Или, по крайней мере, как существительное, которое описывает действие. С другой стороны, вы всегда можете параметризовать стратегию и передать ей состояние клиентского объекта с помощью вызова метода или подобного.
Кроме того, не зависит ли класс от состояния или от состояния не зависит от ключевого слова final
в его полях. Примеры:
- При использовании на объектах
final
означает только то, что ссылка на объект не может быть изменена. Вы все еще можете изменить содержимое этого объекта, как и его поля. В этом случае ваш класс заполнен, хотя его поле является окончательным.
- Если поле действительно является константой, то для большинства намерений и целей вы можете считать его не имеющим состояния. Например, вы можете объявить поле
private static final
, а затем убедиться, что вы ничего не делаете для изменения состояния ссылочного объекта.
РЕДАКТИРОВАТЬ: Давайте попробуем различать параметры самой стратегии и параметров одного конкретного выполнения этой стратегии. Если класс стратегии не имеет состояния, то нет смысла иметь более одного экземпляра этого класса, что делает объект, а не класс, представляет само действие, а выполнение метода представляет одно конкретное выполнение этой стратегии.
Теперь, если у нас есть параметр самой стратегии, то имеет смысл только, чтобы этот параметр имел одинаковое значение для всех исполнений этой стратегии. Таким образом, он может быть помещен в константу, вызов метода, который возвращает константу (если мы не хотим статических вещей), или даже жестко закодирован Как объяснено выше, это может быть реализовано без сохранения состояния.
С другой стороны, если параметр описывает одно конкретное выполнение стратегии, просто передайте его в качестве параметра методу. Это будет делать.
Дополнительное примечание: есть веская причина использовать объекты действий с «наречими», упакованными в своем состоянии, если мы хотим, скажем, иметь какую-то очередь действий с задержкой и расписанием ... Для этого есть шаблон тоже - Команда.