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

Рассмотрим седьмой шаблон из серии Design Patterns — стратегия.

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

А теперь простыми словами — создаем несколько разных алгоритмов (расчет цены например) и определяем какую стратегию используем в отдельном классе, а в конечном классе просто вызываем метод расчета ничего не зная о методах выбора стртатегии.

Перейдем от слов к коду. Напишем интерфейс стратегии расчета стоимости (например бутылки кока-колы неважно).

Метод получает цену на вход и отдает некоторую обработанную (например уменьшенную за счет скидки).

Создадим некую дефолтную стратегию, где ничего не будем делать с ценой.

Никаких изменений, что пришло на вход то и вернем.

Также создадим 2 скидочные стратегии — с большой скидкой (10%) и маленькой (5%)

Ничего сложного, простые математически манипуляции. Теперь напишем некий класс для расчета итоговой стоимости зависящей от количества купленного товара.

Устанавливаем количество товара и в зависимости от этого расчитываем конечную стоимость, если количество товара более 30, скидка будет большой — выбираем нужную стратегию, если же количество меньше 30 но больше 10, будет маленькая скидка, а для количества менее 10 скидок нет, выбираем обычную стратегию. Вот и все. Посмотрим разметку главного экрана.

Здесь текстовая информация о скидках, поле ввода для количества и текстовка вывода. Рассмотрим конечный класс.

Итак, создаем объект для расчета счета, при каждом изменении в поле ввода рассчитываем итоговую цену с учетом скидок и отображаем пользователю.

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

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

Запись опубликована в рубрике Программирование Android, Программирование Java. Добавьте в закладки постоянную ссылку.