@topuserman

Когда применяем паттерн Стратегия, а когда Декоратор?

Правильно ли понимаю, что если какую-то систему разрабатываю с нуля, то лучше применять паттерн Стратегия (если необходим), а если система уже существует (компонент), то для расширения, нужно Декоратор ?

Т.е. суть вопроса в том, что Декоратор обычно применяет к коду, который уже написан и нельзя вносить изменения в логику работы, и с помощь этого паттерна добавляют новые фичи ?

или какие у них отличие и сходство ?
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Стратегия = полиморфизм, то есть мы завязаны на некий интерфейс, а какая реализация — нам не важно. Это история про зависимости. Ну например почтальон отдает пенсию бабушкам (любым, какой бабушке именно — зависит от стратегии, КОТОРАЯ НЕ СВЯЗАНА с модификацией конкретной бабушки:)

Декоратор, это про добавить функционал в рамках одного интерфейса, тут вообще не рассматривается вопрос каких-либо отношений (к примеру бабушки и почтальона), тут рассматривается — бабушка в шубе или бабушка с загаром или бабушка на коляске, все та же бабушка, но "обернутая" неким поведением :) Главное что бабушка всегда остается быть той самой для всех бабушкой. То есть это не противопоставление — ни в начале ни в середине мы не завязываемся на дополнительное поведение бабушки у почтальона. Бабушка и все, а какая именно — зависит от стратегии разноса (например по названию улицы). Если выйдет к нему "декорированная" бабушка-качок — пенсию он даст ей также, как и не качку, тк она для него всего лишь некий субъект/абстракция, главное чтобы возраст и ФИО сошлись.

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

Кое-где не корректные аналогии, и в аналогии стратегия есть бабушка, но в целом для понимания норм и не критично :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
CellycoMobiles
@CellycoMobiles
indi developer @CellycoMobiles
1. Стратегия.
Одно и тоже приложение использует одинаковые библиотеки, но в зависимости от использования имеет разный функционал.
Пример: ffmpeg и ffplayer - имеют ~один исходный код, при компиляции получается отдельно плеер, отдельно конвертер.

2. Декоратор.
Поведение родительского объекта обогащается, не изменяя основной функционал.
Например : button и switch в html .
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы