Перейти к основному содержимому

Шаблонный метод (Template method)

Теория

Шаблонный метод - определяет "скелет" алгоритма в методе, оставляя определение реализации некоторых шагов субклассам. Субклассы могут переопределять некоторые части алгоритма без изменения его структуры.

  • Вызывает ряд методов для реализации алгоритма
  • Один или более методов объявлены как обработчики событий и не имеют реализации
  • Методы-наследники реализуют эти обработчики событий для своей конкретной логики
  • Шаблонный метод вызывает эти обработчики событий в нужной последовательности для выполнения общего алгоритма

Конкретные шаги переносятся в методы-наследники через обработчики событий. Это позволяет повторно использовать общий алгоритм, при необходимости переопределяя отдельные шаги.

Отличия шаблонного метода и стратегии:

  1. Цель использования:
    • Шаблонный метод - определяет структуру метода в общем модуле, перекладывая реализацию отдельных шагов на методы-наследники.
    • Стратегия - возможность замены одного из этапов алгоритма на другой, независимый алгоритмический код.
  2. Способ использования:
    • Шаблонный метод использует механизм переопределения методов в общем модуле.
    • Стратегия реализуется через интерфейс и передачу стратегии через параметр метода.
  3. Зависимость обработок:
    • При шаблонном методе наследник привязан к структуре из общего модуля.
    • Стратегии - самостоятельные обработки, связанные только общим интерфейсом.
  4. Расширяемость:
    • Шаблонный метод расширяется новыми методами-наследниками.
    • Стратегия - созданием новых отдельных стратегий (обработки, модули), реализующих общий интерфейс.

БСП

Переопределяемые общие модули в Библиотеке стандартных подсистем 1С можно рассматривать как реализацию шаблонного метода.

Основные признаки этого:

  • Есть общий модуль, который содержит базовую реализацию некоторого функционала

  • Этот общий модуль содержит переопределяемые методы

  • Конкретные методы подключают этот общий модуль и переопределяют нужные методы

  • Общий модуль вызывает эти переопределяемые части в нужных местах выполнения

Таким образом, в общем модуле реализуется скелет алгоритма - шаблонный метод, а некоторые шаги этого алгоритма перекладываются на конкретные методы для реализации специфичной логики.

Примеры

Код

Функция ОтчетМенеджера(ВидОтчета) Экспорт

Если ВидОтчета = ВидОтчета.Продажи Тогда
ИсточникДанных = ИсточникДанныхПродаж;
ИначеЕсли ВидОтчета = ВидОтчета.Закупки Тогда
ИсточникДанных = ИсточникДанныхЗакупок;
Иначе
ВызватьИсключение "Неизвестный вид отчета";
КонецЕсли;

Запрос = ИсточникДанных.СформироватьЗапрос();
Выборка = Запрос.Выполнить().Выбрать();

Возврат ОбработатьДанныеДляОтчета(Выборка);

КонецФункции
  1. Есть функция ОтчетМенеджера, которая задает общий алгоритм работы. Это и есть шаблонный метод.
  2. В зависимости от входящего параметра ВидОтчета происходит инициализация переменной ИсточникДанных разными источниками (ИсточникДанныхПродаж или ИсточникДанныхЗакупок).
  3. Далее вызываются метод СформироватьЗапрос у объекта ИсточникДанных. Таким образом, конкретная реализация этих методов зависит от источника данных.

Таким образом конкретная логика получения и обработки данных вынесена в отдельные модули (источники данных), а общий алгоритм остается в шаблонном методе. За счет этого достигается гибкость и возможность расширения логики получения отчетов с сохранением общей структуры алгоритма.