В методе шаблона этого шаблона проектирования один или несколько шагов алгоритма могут быть переопределены подклассами, чтобы обеспечить различное поведение при одновременном соблюдении всеохватывающего алгоритма (Wiki).
Имя шаблона Шаблонный метод означает, что это такое. Скажем, у нас есть метод CalculateSomething (), и мы хотим шаблонировать этот метод. Этот метод будет объявлен в базовом классе не виртуальным методом. Скажем, метод выглядит следующим образом.
CalculateSomething(){
int i = 0;
i = Step1(i);
i++;
if (i> 10) i = 5;
i = Step2(i);
return i;
} Реализация методов Step1 и Step2 может быть задана производными классами.
В паттерне стратегии нет реализации, предоставляемой базой (это причина, почему база действительно является интерфейсом на диаграмме классов)
Классический пример - сортировка. На основе количества объектов, подлежащих сортировке, создается соответствующий класс алгоритмов (слияние, всплывающие, быстрые и т. Д.), И весь алгоритм инкапсулируется в каждом классе.
Теперь мы можем реализовать сортировку как шаблонный метод? Конечно, вы можете, но вы не найдете много / каких-либо общих черт, которые можно абстрагировать и поместить в базовую реализацию. Так что это побеждает цель шаблона шаблона.