Видимо тебе показалось, что Стратегия, это как Состояние, которое мы не меняем и в принципе так и есть, в единицу времени мы работаем с всего одной реализацией из многих под общей абстракцией, одна и та-же концепция. На тему что у них вообще общего?
от @Grundy.
Даже стратегия-фасад, когда одна стратегия это набор из нескольких не уникальна, можно написать и состояние-фасад, хоть это и вряд-ли имеет смысл. Да, самое сложное состояние final-state-mashine
ни с какой стратегий не сравнить, но тогда у новичка может возникнуть вопрос, а нахрена эта стратегия ваще нужна?
Все просто.
Когда мы шарим картинку с текстом в социалку на выбор у каждой из которых собственная библиотека, используется стратегия. Или когда одна и та-же игра запускается под DerictX
, OpenGL
или другим графическим api, она выбирает стратегию для рендера и это может не ограничиваться всего одним классом, речь может быть о целых фреймворках и о легкой смены с одной стратегии на другую в реальном времени не может быть и речи, множество сущьностей из-за выбранной стратегии проинициализировались особым способом и нужно начинать весь процесс с начала. Или квесты в играх, их условия выполнения это стратегия принеси N(количество), I(предмет)
, убей N, M(монстр)
, фасад из нескольких разом или фасад одно из двух, тоже самое касается условий провала квеста за T(время)
, нанести урон M
(не трогать), это буквально одни и те-же стратегии, которые просто в разных полях выполнение/провал.
Когда юнит в рпг или стратегии(жанр) постоянно скачет от одного к другому и обратно: стоит/бежит/атакует/умирает то он меняет состояния. Когда мы настраиваем анимацию в окне Animator
, это редактор состояний с регламентированными переходами, тот самый вышеупомянутый final-state-mashine
.
Концепт похожий, но из-за условий использывания они разные. Состояние которое должно постоянно меняться, может иметь крайне короткою абстракцию, бывает обхожусь всего Enter()
и Exit()
. В стратегиях иные реализации вовсе не инициализируются, существует всего лишь одна и у этих реализаций нет и не может быть никаких связей друг с другом, как например переходов в Animator
. И как ты уже мог догадаться, по примеру с графическим api, абстракция может быть довольно мудренной, подобную абстракцию состояния трудно даже представить.