Каково различие между шаблоном разработки Стратегии и шаблоном разработки состояния?

Я использовал бы JavaScript для представления формы. Функция была бы инициирована событием OnKeyPress элемента формы и обнаружит, была ли клавиша Enter выбрана. Если это верно, это отправит форму.

Вот две страницы, которые дают методы о том, как сделать это: 1 , 2 . На основе их вот пример использования (на основе здесь ):




207
задан The Guy with The Hat 9 August 2017 в 08:20
поделиться

5 ответов

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

Другой способ взглянуть на это состоит в том, что шаблон стратегии является более простой версией шаблона состояния; подшаблон, если хотите. Это действительно зависит от того, хотите ли вы, чтобы производные состояния содержали ссылки обратно на контекст (например, хотите ли вы, чтобы они вызывали методы в контексте).

Для получения дополнительной информации: Роберт С. Мартин (& Мика Мартин) отвечает на этот вопрос в своей книге «Agile Principles, Patterns and Practices in C #». ( http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258 )

2
ответ дан 23 November 2019 в 04:44
поделиться

Разница обсуждается в http://c2.com/cgi/wiki?StrategyPattern . Я использовал шаблон стратегии, позволяющий выбирать различные алгоритмы в рамках общей структуры для анализа данных. Благодаря этому вы можете добавлять алгоритмы, не меняя общую структуру и ее логику.

Типичным примером является то, что у вас есть среда для оптимизации функции. Фреймворк устанавливает данные и параметры. Шаблон стратегии позволяет выбирать такие алгоритмы, как кратчайшие спуски, сопряженные градиенты, BFGS и т. Д., Не изменяя структуру.

1
ответ дан 23 November 2019 в 04:44
поделиться
  • Паттерн Стратегия действительно о том, чтобы иметь другой реализация, которая выполняет (в основном) то же самое, так что одна реализация может заменить другую, если этого требует стратегия. Например, у вас могут быть разные алгоритмы сортировки в шаблон стратегии. Вызывающие объект не меняются в зависимости от какая стратегия используется, но независимо от стратегии цель то же самое (отсортируйте коллекцию).
  • Паттерн State предназначен для выполнения разных действий на основе состояние, освобождая вызывающего от бремени приспосабливая все возможные состояния. Так, например, у вас может быть getStatus () , который будет возвращать разные статусы в зависимости от состояние объекта, но вызывающий метод не должен быть кодируется по-разному для учета каждого потенциального состояния.
98
ответ дан 23 November 2019 в 04:44
поделиться

Шаблон стратегии включает перемещение реализации алгоритма из класса хоста в отдельный класс. Это означает, что класс хоста не должен предоставлять реализацию каждого самого алгоритма, что может привести к нечистому коду.

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

Шаблон состояния включает изменение поведения объекта, когда состояние объекта объект меняется. Это означает, что класс хоста не обеспечивает реализацию поведения для всех различных состояний, в которых он может находиться.

25
ответ дан 23 November 2019 в 04:44
поделиться

Стратегия представляет собой объекты, которые что-то «делают» с одинаковыми начальными и конечными результатами, но внутренне используют разные методологии. В этом смысле они аналогичны представлению реализации глагола. Шаблон состояния OTOH использует объекты, которые что-то «являются» - состояние операции. Хотя они также могут представлять операции с этими данными, они больше похожи на представление существительного, чем глагола, и приспособлены для конечных автоматов.

14
ответ дан 23 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: