Diría que Head First simplemente está equivocado en esta caracterización.
Wikipedia define el Método de plantilla como:
En ingeniería de software, el patrón de método de plantilla es un patrón de diseño de comportamiento que define el esqueleto del programa de un algoritmo en una operación, difiriendo algunos pasos a las subclases.
(Hace referencia a GoF para eso).
Y el Método de Fábrica se define como:
En la programación basada en clases, el patrón de método de fábrica es un patrón de creación que utiliza métodos de fábrica para tratar el problema de crear objetos sin tener que especificar la clase exacta del objeto que se creará.
No hay superposición entre los dos, excepto que en C ++, la herencia es una parte clave de ambos. Sin embargo, en los lenguajes que distinguen entre herencia de implementación ( extends
en Java) e implementación de interfaz ( implements
en Java), incluso esta característica común no existe, ya que la implementación de la interfaz es suficiente para el método de fábrica, pero no para el método de plantilla. Y en C ++, la herencia de implementación pura (sin la herencia de interfaz, es decir, herencia privada o CRTP) se puede usar para la primera, pero no para la segunda.
¿Y aparte de eso? Uno es un patrón de diseño de comportamiento, el otro un patrón de creación. Uno describe un esquema de una operación, con algunas partes clave que deben ser completadas por subclases especializadas; el otro especifica un contrato muy simple, dejando toda la implementación a las instancias concretas. Son completamente distintos.
En mi opinión, la línea que se cita es simplemente incorrecta. O es un error evidente en el libro, o (menos probable) está fuera de contexto y debe interpretarse de manera diferente.