この特徴付けでは、ヘッドファーストは単に間違っていると思います。
ウィキペディアでは、テンプレートメソッドを次のように定義しています。
ソフトウェアエンジニアリングでは、テンプレートメソッドパターンは動作のアルゴリズムのプログラムスケルトンを定義する動作設計パターンであり、サブクラスにいくつかのステップを延期します。
(それはGoFを参照しています。)
また、ファクトリーメソッドは次のように定義されます。
クラスベースのプログラミングでは、ファクトリメソッドパターンは、作成されるオブジェクトの正確なクラスを指定せずに、ファクトリメソッドを使用してオブジェクトの作成の問題に対処する作成パターンです。
C ++では継承が両方の重要な部分であることを除いて、2つの間に重複はありません。ただし、実装の継承(extends
Java)とインターフェースの実装(Java)を区別する言語でimplements
は、インターフェースの実装でファクトリメソッドは十分ですが、テンプレートメソッドでは十分でないため、この共通性さえ存在しません。また、C ++では、前者には純粋な実装継承(インターフェース継承なし、つまりプライベート継承またはCRTPなし)を使用できますが、後者には使用できません。
それとは別に?1つは行動パターン、もう1つは創造パターンです。1つは操作の概要を説明するもので、一部の重要な部分は省略して、特殊なサブクラスで埋めます。もう1つは非常に単純なコントラクトを指定し、実装全体を具体的なインスタンスに任せます。それらは完全に異なります。
私の意見では、引用された行は単に間違っています。これは本の明白なエラーであるか、または(可能性は低いですが)コンテキスト外であり、異なる解釈が必要です。