Прочитал тут статейку : Паттерн проектирования “Стратегия
Статья хорошая, подробно все описывает
вот только я не фига не понял фишки этого патерна.
Т.е. мы создаем какую-то неизведанную хрень, и для этого нам надо:
1. в интерфейсе FillStrategy добавить свой метод
2. создать новый класс nnnFillStrategy, в котором переопределяем этот метод
3. подставить этот класс в конструкторе нашего класса
и в чем преимущество, по сравнению с первым вариантом:
1. Создаем новый интерфейс nnnFillable
2. имплементим его в свой класс
Что в первом, что во втором варианте нам надо что-то менять в своем коде.
Вот только, если у нас появиться одна, потом вторая, потом третья хрень и т.д. - в первом варианте, создаем сколько надо интерфейсов и наимплиментить их можно тоже сколько угодно.
А как быть с нашим патерном? У нас привязка к конкретной переменной. Тут придется переписывать уже имеющийся код? Но это не есть гут
Может я не прав, первый раз с ним столкнулся, поэтому буду рад справедливой критике, особенно если это поможет мне понять как это использовать на практике
alex
41 уровень
Вопрос по паттерну проектирования Стратегия
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Di Ma Java Developer в Сбер
11 мая 2020, 15:22
Есть интерфейс и несколько классов имплинтирующие этот интерфейс. В интерфейсе описано действие (метод) без реализации. В программе есть переменная типа интерфейс. Из этой переменной вызывается метод, но переменная в зависимости от условий может быть инициализирована выше описанными классами (в каждом классе своя реализация). т.е. нужно мне получать данные с диска я инициализирую один класс, надо с бд другой класс, с рест микросервиса третий класс, но так как все они имеют один интерфейс, то и метод у них один и тот же, только с разной реализацией. Т.е я не меня кода просто подкидываю нужный мне класс с нужной реализацией.
0
Влад Java Developer в Tinkoff
8 мая 2020, 11:10
Хороший сайт по паттернам: https://refactoring.guru/ru/design-patterns/strategy
0
Сергей Java Developer в Сбер Expert
5 мая 2020, 16:28
TreeSet - хороший пример паттерна стратегия. В конструктор можно передавать компоратор (Объект класса который реализует интерфейс компоратор).
Таким образом стратегия сортировки в сете будет такой, какой мы ее зададим. Остальные методы работают также.
0
Стас Пасинков Software Developer в Zipy Master
5 мая 2020, 12:12
это энтерпрайз, детка (с)
+3
Стас Пасинков Software Developer в Zipy Master
5 мая 2020, 12:13
фабрика-фабрик-билдеров-стратегий - вообще обычное дело :)
слышал такое, что среди разработчиков спринга есть даже ачивка на самое длинное обоснованное название класса))
0
Justinian Judge в Mega City One Master
5 мая 2020, 10:20
Критиковать можно код, у тебя критиковать нечего - кода нет, вместо него нечеткие абстракции:
привязка к конкретной переменной, "тут придется переписывать", к какой переменной, где это "тут", что переписывать. Непонятно.
Старайся максимально часто как возможно использовать код.
Программисты общаются кодом. Суть паттернов в том, что они решают какие-то определенные конкретные практические проблемы.
На примере твоего вопроса, у тебя в головне закономерно возникли вопросы, это понятно. Но ты должен их зафиксировать, систематизировать, структурировать, разложить по полочкам. В любой непонятной ситуации пиши код. Думай. Плюс если говорить о паттернах просто огромное количество информации - видео, учебные курсы по ним, репозитории, статьи, книги.
Но то такое, давай все-таки со стороны практики подойдем.
Вот тебе к примеру ссылка, https://www.youtube.com/watch?v=rsB2exGsR4I посмотри видео, и реши по такой же задаче, только своим способом.
И ссылочку или на гитхаб, или если еще не пользуешься, тогда на codeshare/pastebin всей файлы в одном листинге кода.
Но сразу же брошу спойлер. Возможно ты не учитываешь то, что много материалов по паттернам носят схематический характер, вот метод на один систем аут принтл.
Но на самом деле, предусматривается достаточно тяжелая, часто разрозненная логика, которая возможно потребует различные поля, много полей, методов и тд.
И поэтому и возник этот шаблон, чтобы отделить поведение от самого объекта, модели поведения здесь главное. При добавлении новой тяжелой модели, добавляется лишь дополнительный класс и все отлично работает.
Возможно ты решишь эту проблему иначе, давай посмотрим, покажешь код, обсудим.
p.s. https://javarush.com/quests/lectures/questcollections.level06.lecture15 вот здесь будет задача на этот паттерн
+3