Direi che Head First è semplicemente sbagliato in questa caratterizzazione.
Wikipedia definisce il metodo del modello come:
In software engineering, the template method pattern is a behavioral design pattern that defines the program skeleton of an algorithm in an operation, deferring some steps to subclasses.
(Si riferisce a GoF per questo.)
E il metodo di fabbrica è definito come:
In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created.
Non c'è sovrapposizione tra i due, tranne che in C ++, l'ereditarietà è una parte fondamentale di entrambi. Tuttavia, in linguaggi che fanno una distinzione tra ereditarietà dell'implementazione ( extends
in Java) e implementazione dell'interfaccia ( implements
in Java), anche questa comunanza non esiste, poiché l'implementazione dell'interfaccia è sufficiente per il metodo factory, ma non per il metodo template . E in C ++, l'ereditarietà di implementazione pura (senza l'ereditarietà dell'interfaccia, ovvero l'ereditarietà privata o CRTP) può essere utilizzata per il primo, ma non per il secondo.
E a parte questo? Uno è un modello di progettazione comportamentale, l'altro un modello creazionale. Uno descrive uno schema di un'operazione, con alcune parti chiave lasciate fuori da sottoclassi specializzate; l'altro specifica un contratto molto semplice, lasciando l'intera implementazione alle istanze concrete. Sono completamente distinti.
Secondo me, la frase citata è semplicemente sbagliata. O è un errore eclatante nel libro, o (meno probabile) è fuori dal contesto e dovrebbe essere interpretato in modo diverso.