C++ デザイン パターン テンプレート メソッド パターンの簡単な紹介

黄舟
リリース: 2017-01-18 14:54:53
オリジナル
1337 人が閲覧しました

テンプレート メソッド パターン: 一部のステップをサブクラスに延期しながら、操作内のアルゴリズムのスケルトンを定義します。テンプレート メソッドを使用すると、アルゴリズムの構造を変更せずに、サブクラスでアルゴリズムの特定のステップを再定義できます。

適切な時期: 特定の詳細レベルで一貫したプロセスまたは一連のステップを完了したいが、より詳細なレベルでの個々のステップの実装が異なる場合は、通常、テンプレート メソッドの使用を検討します。それを扱うパターン。

テンプレート メソッドの 2 つの役割:

抽象クラス (AbstractClass): 最上位ロジックのフレームワークを提供します。

具象プロダクト クラス (ConcreteClass): 親クラスによって定義された 1 つ以上の抽象メソッドを実装します。 AbstractClass は複数の ConcreteClass を持つことができます。

構造図:

C++ デザイン パターン テンプレート メソッド パターンの簡単な紹介


テストケース:

[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 サイト (www.php.cn) をご覧ください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート