Я читал эту ссылку о шаблоне состояния. Это похоже на шаблон стратегии? Какова точная разница между этими двумя шаблонами?
Шаблон проектирования стратегии против шаблона проектирования состояния
Ответы (4)
Разница между состоянием и стратегией заключается в намерении. Со Стратегией выбор алгоритма достаточно стабилен. При использовании состояния изменение состояния объекта «контекст» заставляет его выбирать из его «палитры» объектов стратегии.
См. http://sourcemaking.com/design_patterns/state.
Шаблон стратегии очень похож на шаблон состояния. Одно из отличий состоит в том, что контекст содержит состояние как переменную экземпляра, и может быть несколько задач, реализация которых может зависеть от состояния, тогда как в шаблоне стратегии стратегия передается в качестве аргумента методу, а объект контекста не имеет переменной для ее хранения. .
для получения более подробной информации см. Шаблон разработки стратегии в учебном примере Java< /а>
Я думаю, что одно из основных отличий заключается в том, что:
-В шаблоне State мы передаем сам контекст в качестве параметра методу конкретного класса состояния, который нам нужно присвоить контексту, и он делает две вещи: сначала он присваивает себя отправленному контексту. , во-вторых, свою роль он выполняет.
- В шаблоне Strategy мы передаем стратегию в контекст при ее первом создании, поэтому она остается неизменной для всей программы, если только мы не назначаем ту же переменную новому контексту (указателю) в память, используя «новую», и назначит ей новую стратегию, а через некоторое время сборщик мусора удалит старый контекст с назначенной ему стратегией.
Точнее говоря, Стратегия фиксирована для одного контекста, и однажды назначенная, не может быть изменена, даже если контекст не имеет установщика стратегии. Но для State многие состояния могут быть назначены одному и тому же контексту одно за другим, так как у контекста есть установщик для состояний.
Я надеюсь, что это полезно.
В шаблоне состояния обычно действие состояния вызывает изменение состояния; в шаблоне стратегии действие стратегии не вызывает изменения стратегии. Другими словами, изменение состояния заключается в самом состоянии; изменение стратегии заключается во внешних условиях.