Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы. Позволяя подклассам переопределять шаги алгоритма, не меняя его общей структуры.

Назначение

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

Применимость

Паттерн шаблонный метод следует использовать:

  • чтобы однократно использовать инвариантные части алгоритма, оставляя реализацию изменяющего поведения на усмотрение подклассов;
  • когда нужно вычленить и локализовать в одном классе поведение, общее для всех подклассов, дабы избежать дублирования кода;
  • для управления расширениями подклассов. Можно определить шаблонный метод так, что он будет вызывать операции-зацепки в определенных точках, разрешив тем самым расширение только в этих точках.

Структура

Участники

  • AbstractClass - абстрактный класс:
    • определяет абстрактные примитивные операции, замещаемые в конкретных подклассах для реализации шагов алгоритма;
    • реализует шаблонный метод, определяющий скелет алгоритма. Шаблонный метод вызывает примитивные операции, а также операции, определенные в классе AbstractClass или в других объектах;
  • ConcreteClass - конкретный класс - реализует примитивные операции, выполняющие шаги алгоритма способом, который зависит от подкласса.

Результаты

Шаблонные методы - один из фундаментальных приемов повторного использования кода. Они особенно важны в библиотеках классов, поскольку предоставляют возможность вынести общее поведение в библиотечные классы.

Шаблонные методы приводят к инвертированной структуре кода, которую иногда называют "Принцип Голливуда", подразумевая часто употребляемую в этой киноимперии фразу "Не звоните нам, мы сами позвоним". В данном случае это означает, что родительский класс вызывает операции подкласса, а не наоборот.