👣 Расскажите про шаблон проектирования Стратегия? Приведите пример реализации на Go.



Стратегия (. Strategy) — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путём определения соответствующего класса. Шаблон Стратегия (. Strategy) позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.



Реализация шаблона представлена на кратинке.



В примере у объекта toy есть DialogueReciter, который является интерфейсом, и это важно, поскольку мы хотим, чтобы поведение объекта-игрушки можно было изменять во время выполнения программы. Если бы это был не интерфейс, а конкретный тип, то мы могли бы присвоить объекту-игрушке только поведение этого конкретного типа.



Поведение для объекта toy определено в интерфейсе, а фактическая реализация поведения, например, Recite, выполняется отдельно различными конкретными типами, например, SpiderMan, SuperMan и BatMan.



Если бы поведение toy было закодировано в конкретном типе, то мы были бы заблокированы на использование только этого конкретного поведения.



Поэтому можно сказать, что "программируй под интерфейс, а не под реализацию", и это важный принцип проектирования.

"Паттерн стратегии" определяет семейство алгоритмов,

инкапсулирует каждый из них и делает их взаимозаменяемыми.



Стратегия позволяет алгоритму изменяться независимо от

клиентов, которые его используют".



Пишите свой пример реализации шаблона в комментариях👇



@golang_interview