Отделение процедуры выбора алгоритма от его реализации. Любое изменение алгоритмов поиска, будь то исправление багов или добавление нового алгоритма, затрагивало основной класс. Это повышало риск сделать ошибку, случайно задев остальной работающий код. Этот пример показывает структуру паттерна Стратегия, а именно — из каких классов он состоит, какие роли эти классы выполняют и как они взаимодействуют друг с другом. Это позволяет создавать стратегии прямо в коде, не определяя отдельный класс. Хотя стратегии часто реализуют общий интерфейс, лучше избегать наследования между конкретными стратегиями.
При этом замена алгоритма происходит независимо от объекта, который использует данный алгоритм. Паттерн «Стратегия» применяется в том случае, когда у одной и той же проблемы в приложении может быть несколько решений. Этот паттерн позволяет объединять похожие алгоритмы в единое семейство и подключать тот или иной алгоритм в работу по необходимости. Алгоритмы внутри стратегии могут сменять друг друга или видоизменяться. Состояние можно рассматривать как расширение стратегии – оба паттерна меняют поведение объекта композицией. Но в состоянии сами конкретные состояния могут управлять переходом контекста между ними.
Друзья, мы познакомились с поведенческим шаблоном проектирования Strategy. Шаблон используется для выделения схожих алгоритмов, решающих конкретную задачу. Посмотрели с вами реализацию на языке GOlang, ознакомились в возможностями подхода и разобрали когда его лучше применять. По типу клиента (или по типу обрабатываемых данных) выбрать подходящий алгоритм, который следует применить.
Задача контроллера определить класс-стратегию и запросить у класса-контекста данные для отображения, передав ему известный набор фильтров. Класс-контекст в этой схеме – это класс, которые реализует метод поиска квартир по заданным фильтрам. На диаграмме классов выше мы видим, что класс контекста определяет метод getData, и принимает аргументы filters. У него должен быть конструктор, принимающий активный в данный момент объект-стратегии и сеттер setStrategy, устанавливающий активную стратегию.
Одной из самых востребованных функций являлся поиск и прокладывание маршрутов. Пребывая в неизвестном ему городе, пользователь должен иметь возможность указать начальную точку и пункт назначения, а навигатор — проложит оптимальный путь. Это гибкий подход, упрощающий создание новых стратегий. Со временем может возникнуть сложность поддержки множества стратегий.
Паттерн Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями. Другие объекты содержат ссылку на объект-стратегию и делегируют ей работу. Программа может подменить этот объект другим, если требуется иной способ решения задачи. Стратегия — это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми. Интернет-магазин может использовать разные стратегии расчета цен в зависимости от статуса пользователя, сезонных скидок, акций и других факторов.
Если функционал поиска и фильтрации с квартирами на продажу экспо форекс отзывы было довольно легко реализовать, то любые новые изменения вызывали много вопросов и головную боль по архитектуре. Вы понимали, что любое изменение алгоритмов выдачи нужных квартир и элементов для отображения затрагивает основные базовые классы, в которых реализован весь функционал фильтрации. Design patter Strategy или шаблон проектирования Стратегия относится к поведенческим шаблонам проектирования.
Такой метод пригодится для случая, когда пользователь меняет тип искомого объекта, например, он ищет недвижимость на продажу и хочет снять квартиру. Паттерн стратегия – один из наиболее полезных и часто используемых шаблонов проектирования в программировании. Он позволяет гибко настраивать поведение объекта, независимо от того, как этот объект используется клиентским кодом.
Через некоторое время выяснилось, что некоторые люди предпочитают ездить по городу на общественном транспорте. Первая версия вашего навигатора могла прокладывать маршрут лишь по дорогам, поэтому отлично подходила для путешествий на автомобиле. Поэтому следующим шагом вы добавили в навигатор прокладывание пеших маршрутов.
Если используется правило, которое не подвержено изменениям, нет необходимости обращаться к шаблону «стратегия». Стратегия позволяет изолировать код, данные и зависимости алгоритмов от других объектов, скрыв эти детали внутри классов-стратегий. В нашем примере каждый алгоритм поиска пути переедет в свой собственный класс.
Далее, в зависимости от типа данных что у нас есть, и их объема, решаем какой алгоритм предпочтительнее использовать. Паттерн стратегия широко применяется при разработке программного обеспечения. Ну и конечно вы хорошо постарались, как разработчик и все правильно сделали на ваш взгляд с точки зрения архитектуры кода, реализовали классы, которые ищет квартиры на продажу в вашей базе. Сегодня хочу с вами поговорить про шаблон проектирования Стратегия (Strategy).
Для арендаторов не так важно показывать фильтры по цене, им важно состояние квартиры, поэтому нужно отображать фотографии арендуемых квартир. У каждого объекта «драйвер» и «устройство» есть неизменяемая часть, вшитая в систему, в которой регистрируется изменяемая часть (стратегия), написанная в конкретной реализации. Изменяемая часть может быть и вовсе пустой, что даст ничего не делающий драйвер, но при этом способный участвовать в PnP и управлении питанием.