На самом деле они могут использоваться вместе довольно эффективно.
Не думайте, что шаблоны - это рецепты с конкретным кодом для их реализации.
Ключом является замысел проектирования, и может быть много реализаций. Упоминая где-нибудь имя шаблона в своем коде, вы позволяете читателю понять свои намерения, когда вы пишете этот код. Реализация вторична.
Шаблонный метод дает вам «алгоритм со сменными шагами». (Алгоритм обычно определяется не переопределяемым методом (например, final или private))
Реализация этой концепции в GoF для замены этих шагов использует наследование и переопределение методов.
Однако , вы все еще используете метод Template, если эти шаги заменены на стратегии .
Например, подумайте о классе, который хочет пройтись по двоичному порядку дерева и «сделать что-то» на каждом узле.
Намерение состоит в том, что метод inorder () является шаблонным методом - структура прогулки всегда одинакова.
Метод «ловушки», часть, которая «что-то делает», может быть реализована как метод в том же классе (и переопределен в подклассах для изменения поведения), так и внешне, и в этом случае это стратегия «делать что-то» .