Разработка стратегии шаблон против государственного образца дизайн


Я читал через эту ссылку о паттерне состояния. Похоже ли это на стратегию паттерна? Какова точная разница между этими двумя паттернами?

4 3

4 ответа:

Разница между государством и стратегией заключается в намерении. Со стратегией выбор алгоритма достаточно стабилен. В случае состояния изменение состояния объекта "контекст" заставляет его выбирать из своей "палитры" объекты стратегии.

См. http://sourcemaking.com/design_patterns/state

Паттерн стратегии очень похож на паттерн состояния. Один из отличие состоит в том, что контекст содержит состояние в качестве переменной экземпляра и может быть несколько задач, реализация которых может зависеть от государство в то время как в стратегии шаблон стратегии передается в качестве аргумента к методу и контексту объект не имеет никакой переменной для хранения оно.

Для получения более подробной информации смотрите шаблон разработки стратегии в примере Java tutorial

Я думаю, что одно из главных отличий состоит в том, что:

- в шаблоне State мы передаем сам контекст в качестве параметра методу класса State concrete, который нам нужно назначить контексту, и он делает две вещи: во-первых, он присваивает себя переданному контексту, во-вторых, он выполняет свою роль.

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

Более четко, Стратегия фиксирована для одного контекста и после назначения она не может быть изменена, даже контекст не имеет задатчика стратегии. Но для состояния многие состояния могут быть назначены одному и тому же контексту одно за другим, поскольку контекст имеет задатчик для состояний.

Я надеюсь, что это так полезный.

В паттерне состояния обычно действие состояния вызывает изменение состояния; в паттерне стратегии действие стратегии не вызывает изменения стратегии. Иными словами, изменение состояния заключается в самом состоянии, изменение стратегии-во внешних условиях.