Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

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

Назначение

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

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

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

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

Структура

Участники

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

Результаты

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

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