Um Template Method auxilia na definição de um algoritmo com partes do mesmo definidos por métodos abstratos. As subclasses devem se responsabilizar por estas partes abstratas, deste algoritmo, que serão implementadas, possivelmente de várias formas, ou seja, cadasubclasse irá implementar à sua necessidade e oferecer um comportamento concreto construindo todo o algoritmo.
O Template Method fornece uma estrutura fixa, de um algoritmo, esta parte fixa deve estar presente na superclasse, sendo obrigatório uma classeAbstrata que possa conter um método concreto, pois em uma interface só é possível conter métodos abstratos que definem um comportamento, esta é a vantagem de ser uma Classe Abstrata porque também irá fornecer métodos abstratos às suas subclasses, que por sua vez herdam este método, por Herança (programação), e devem implementar os métodos abstratos fornecendo um comportamento concreto aos métodos que foram definidos como abstratos. Com isso certas partes do algoritmo serão preenchidos por implementações que irão variar, ou seja, implementar um algoritmo em um método, postergando a definição de alguns passos do algoritmo, para que outras classes possam redefiní-los.
Fonte: https://pt.wikipedia.org/wiki/Template_Method
STRATEGY: "definir uma família de algoritmos, encapsular cada um e fazê-los intercambiáveis"
MEDIATOR: "desacoplar uma abstração de sua implementação, de tal forma que as duas possam variar independentemente."
COMMAND: "encapsular uma requisição para parametrizar clientes com diferentes requisições e filas e dar suporte a ações reversíveis."
FACADE: "oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema."
Template Method: "permitir a definição da parte invariante de um algoritmo separadamente de sua parte variante."