Паттерны

Расскажите про паттерн «Шаблонный метод» (Template Method)


Паттерн «Шаблонный метод» (Template Method) относится к поведенческим паттернам проектирования и используется для определения скелета алгоритма в базовом классе, оставляя реализацию некоторых шагов подклассам. Это позволяет подклассам переопределять отдельные шаги алгоритма, не меняя его общей структуры. Основная идея паттерна «Шаблонный метод» заключается в определении базового класса, который содержит абстрактные методы и конкретные методы, формирующие шаблон алгоритма. Подклассы могут переопределить абстрактные методы, чтобы предоставить свою реализацию, но структура алгоритма остается неизменной. Пример реализации паттерна «Шаблонный метод» на языке Java: // Абстрактный класс, определяющий шаблон алгоритма public abstract class AbstractClass { public void templateMethod() { step1(); step2(); step3(); } protected abstract void step1(); protected abstract void step2(); protected void step3() { System.out.println("Шаг 3: выполнение общей операции"); } } // Конкретный класс, реализующий шаги алгоритма public class ConcreteClass extends AbstractClass { protected void step1() { System.out.println("Шаг 1: выполнение конкретной операции"); } protected void step2() { System.out.println("Шаг 2: выполнение конкретной операции"); } } В данном примере у нас есть абстрактный класс AbstractClass, который определяет шаблон алгоритма с помощью метода templateMethod(). Этот метод вызывает абстрактные методы step1() и step2(), а также конкретный метод step3(). Подклассы могут переопределить абстрактные методы, чтобы предоставить свою реализацию. Класс ConcreteClass является конкретной реализацией шаблона алгоритма. Он переопределяет абстрактные методы step1() и step2(), предоставляя свою реализацию для каждого шага. Теперь мы можем использовать шаблонный метод, вызывая метод templateMethod() объекта ConcreteClass. Например: AbstractClass abstractClass = new ConcreteClass(); abstractClass.templateMethod(); Паттерн «Шаблонный метод» позволяет определить скелет алгоритма в базовом классе, оставляя реализацию некоторых шагов подклассам. Это упрощает повторное использование кода и обеспечивает гибкость в изменении отдельных шагов алгоритма.


Копировать ссылку