Рубрики
Без рубрики

Шаблоны проектирования: Шаблон Стратегии

Краткое и грязное введение в шаблон разработки стратегии!

Автор оригинала: Henri.

первоначально опубликовано в моем блоге по адресу первоначально опубликовано в моем блоге по адресу

Привет, мир! В настоящее время я читаю Шаблоны проектирования “Голова вперед”: Руководство для работы с мозгом . Если вы впервые читаете о шаблонах проектирования в объектно-ориентированном программировании (ООП), это отличное место для начала!

Однако я бы не рекомендовал его в качестве справочного руководства, потому что там масса примеров, иллюстраций и неофициальных описаний. Вот первый образец, представленный в книге.

Шаблон стратегии : определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо для клиентов, которые его используют.

Звучит запутанно, но на самом деле это довольно просто. Модель основана на следующих трех принципах:

  1. Определите различные аспекты вашего приложения и отделите их от того, что остается неизменным.
  2. Программа для интерфейса, а не реализация.
  3. Предпочитайте композицию наследству.

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

Допустим, мы начинаем компанию по производству роботов, такую как Boston Dynamics. Мы хотим создавать все типы роботов. Ознакомьтесь с приведенным ниже классом, который будет использоваться для всех моделей поведения нашего робота.

Снимок экрана 2017-09-13 в 9.09.24 вечера.png

Здесь мы применяем наш первый принцип. Наша воображаемая компания должна уметь создавать роботов, которые работают на земле, в воздухе или на воде. Все наши роботы также должны уметь произносить приветствие ” Привет, мир!”.

Приветствие – это поведение, которое остается неизменным. Остальные три модели поведения-это то, что будет меняться от робота к роботу. Поэтому мы отделим поведение “ходить”, “плавать” и “летать” от поведения “приветствия”. Давайте посмотрим, как это сделать.

Принцип второй гласит, что лучше использовать интерфейсы, а не прямые реализации. Что мы сделаем, так это создадим интерфейсы для каждой группы поведения, которая может измениться. Таким образом, может существовать множество различных реализаций каждой из них. Смотреть ниже.

Снимок экрана 2017-09-13 в 11.43.18 вечера.png

Когда придет время создавать конкретную реализацию робота, мы расширим класс роботов. Таким образом, у нас есть доступ к поведению “приветствие”.

Поведение приветствия может быть закодировано в классе роботов, так как оно будет одинаковым для всех роботов, которых мы когда-либо создадим. Когда придет время добавить поведение ходьбы, плавания или полета к нашему новому роботу, он не унаследует это поведение от исходного класса робота — вместо этого ему будет назначена реализация интерфейса.

Другими словами, он будет составлен во время выполнения. Это успешно разделяет эти изменяющиеся и неизменяющиеся модели поведения с помощью интерфейсов. Таким образом, мы следуем нашему третьему принципу проектирования. Взгляните на диаграмму ниже, чтобы увидеть все это сверху, включая три примера роботов: Собаку, Акулу и Орла.

Снимок экрана 2017-09-14 в 10.40.28 утра.png

Вот и все! Это краткое введение в Шаблон Стратегии. Сверху вы можете видеть, как будет выглядеть полная диаграмма классов, когда мы реализуем шаблон стратегии. Спасибо за чтение 👋 🏽

Этот пост первоначально опубликован автором здесь . Эта версия была отредактирована для ясности и может отличаться от исходного сообщения

Оригинал: “https://www.codementor.io/@henri.idrovo/design-patterns-strategy-pattern-bxje6n5et”