Призначення патерну Strategy

Існують системи, поведінка яких може визначатися згідно з одним алгоритмом з деякого сімейства. Всі алгоритми цього сімейства є спорідненими: призначені для вирішення спільних завдань, мають однаковий інтерфейс для використання та відрізняються лише реалізацією (поведінкою). Користувач, попередньо налаштувавши програму на потрібний алгоритм (обравши стратегію), отримує очікуваний результат. Як приклад, - додаток, призначений для компресії файлів, використовує один з доступних алгоритмів: zip, arj або rar.

Об'єктно орієнтований дизайн такої програми може бути побудований на ідеї використання поліморфізму. В результаті отримуємо набір споріднених класів із загальним інтерфейсом та різними реалізаціями алгоритмів.

паттерн

Представленому підходу властиві такі недоліки:

  1. Реалізація алгоритму жорстко прив'язана до його підкласу, що ускладнює підтримку та розширення такої системи.
  2. Система, побудована з урахуванням успадкування, є статичною. Замінити один алгоритм на інший під час виконання програми вже неможливо.

Застосування патерну Strategy дозволяє усунути зазначені недоліки.

Опис патерну Strategy

проектування

Структура патерну Strategy

UML-діаграма класів патерну Strategy

шаблон

Реалізація патерну Strategy

Наведемо реалізацію програми для стиснення файлів, спроектованого із застосуванням патерну Strategy.