Паттерн проектирования — это продуманный способ построения исходного кода программы для решения часто возникающих в повседневном программировании проблем проектирования. Иными словами, это уже придуманное решения, для типичной задачи. При этом паттерн не готовое решение, а просто алгоритм действий, который должен привести к желаемому результату. Давайте рассмотрим один из наиболее часто используемых поведенческих паттернов — Шаблонный метод (Template method).
Как я уже писал ранее, существует три вида паттернов проектирования:
- Порождающие паттерны позволяют возможность выполнять инициализацию объектов наиболее удобным и оптимальным способом.
- Структурные паттерны описывают взаимоотношения между различными классами или объектами, позволяя им совместно реализовывать поставленную задачу.
- Поведенческие паттерны позволяют грамотно организовать связь между сущностями для оптимизации и упрощения их взаимодействия.
Шаблонный метод (Template method) — это поведенческий паттерн, который позволяет определить каркас алгоритма, обособившись от конкретной реализации всех или некоторых шагов, позволяя делать это подклассам, при этом не нарушая структурной целостности алгоритма. То есть, Шаблонный метод задет основу алгоритма и позволяет наследникам вносить поправки, не меняя алгоритм в целом.
Давайте рассмотрим диаграмму паттерна Шаблонный метод
- AbstractClass — определяет невиртуальный метод TemplateMethod, который вызывает внутри примитивные операции PrimitiveOperation1(), PrimitiveOperation2()
- ConcreteClass — реализует примитивные шаги алгоритма.
Рассмотрим основную логику работы паттерна Шаблонный метод. В базовом классе определен метод, например пусть это будет приготовления пирога. Он определяет последовательность действий замешать тесто, добавить начинку, приготовить в духовке. Данная последовательность будет идентичной для всех пирогов, а вот конкретные реализации для яблочного и мясного пирога будут кардинально отличаться на всех этапах приготовления. Таким образом шаблонный метод задает последовательность определенных действий, а наследники реализуют эти действия в соответствии со своими требованиями и особенностями.
Теперь переходим к реализации данного паттерна. Для начала определим базовый класс. В нем реализуем один шаблонный метод Cook, который определяет последовательность действий
- Приготовить тесто
- Приготовить начинку
- Запечь в духовке
Последовательность этих действий будет одинакова для любого пирога.
Продолжение, с деталями реализации на языке C# доступно по ссылке https://shwanoff.ru/templatemethod/