テンプレート メソッド パターン: 一部のステップをサブクラスに延期しながら、操作内のアルゴリズムのスケルトンを定義します。テンプレート メソッドを使用すると、アルゴリズムの構造を変更せずに、サブクラスでアルゴリズムの特定のステップを再定義できます。
適切な時期: 特定の詳細レベルで一貫したプロセスまたは一連のステップを完了したいが、より詳細なレベルでの個々のステップの実装が異なる場合は、通常、テンプレート メソッドの使用を検討します。それを扱うパターン。
テンプレート メソッドの 2 つの役割:
抽象クラス (AbstractClass): 最上位ロジックのフレームワークを提供します。
具象プロダクト クラス (ConcreteClass): 親クラスによって定義された 1 つ以上の抽象メソッドを実装します。 AbstractClass は複数の ConcreteClass を持つことができます。
構造図:
テストケース:
[code]int main(){ AbstractClass *pAbstractA = new ConcreteClassA; pAbstractA->TemplateMethod(); //Output: ConcreteA Operation1 ConcreteA Operation2 AbstractClass *pAbstractB = new ConcreteClassB; pAbstractB->TemplateMethod(); //Output: ConcreteB Operation1 ConcreteB Operation2 if(pAbstractA) delete pAbstractA; if(pAbstractB) delete pAbstractB; return 0; }
テンプレートメソッドの実装:
[code]class AbstractClass{ public: void TemplateMethod(){ //统一的对外一个接口 PrimitiveOperation1(); PrimitiveOperation2(); } protected: virtual void PrimitiveOperation1(){ //原始操作1 std::cout << "Default Operation1\n"; } virtual void PrimitiveOperation2(){ //原始操作2 std::cout << "Default Operation2\n"; } }; class ConcreteClassA: public AbstractClass{ protected: //重载方法1和2 virtual void PrimitiveOperation1(){ std::cout << "ConcreteA Operation1\n"; } virtual void PrimitiveOperation2(){ std::cout << "ConcreteA Operation2\n"; } }; class ConcreteClassB: public AbstractClass{ protected: virtual void PrimitiveOperation1(){ std::cout << "ConcreteB Operation1\n"; } virtual void PrimitiveOperation2(){ std::cout << "ConcreteB Operation2\n"; } };
テンプレートメソッドの機能:
テンプレートメソッドのパターンは、変更されていない動作を親クラスに移動し、親クラスから削除します。サブクラスの利点を反映するためにコードを複製します。
テンプレート メソッド パターンは、優れたコード再利用プラットフォームを提供します。
上記は C++ デザイン パターンのテンプレート メソッド パターンの内容です。その他の関連内容については、PHP 中国語 Web サイト (m.sbmmt.com) をご覧ください。