章X - Template Methodパターン

テンプレート法(TemplateMethod):サブクラスのいくつかのステップを延期しながらスケルトンアルゴリズムは、一回の操作で定義されました。方法テンプレートサブクラスはアルゴリズムの再定義の特定のステップにアルゴリズムの構造を変更できないように

絵

基本的なコード

#include<iostream>
#include<string>

using namespace std;

/*AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,
  他给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。*/

class AbstractClass
{
public:
    virtual void PrimitiveOperation1() = 0;    //一些抽象行为,放到子类去实现
    virtual void PrimitiveOperation2() = 0;

    void TemplateMethod()    //模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,他们都推迟到子类实现
    {
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
};

/*ConcreteClass,实现父类所定义的一个或多个抽象方法*/
class ConcreteClassA : public AbstractClass
{
public:
    void PrimitiveOperation1()
    {
        cout << "具体类A方法1实现" << endl;
    }

    void PrimitiveOperation2()
    {
        cout << "具体类A方法2实现" << endl;
    }
};

class ConcreteClassB : public AbstractClass
{
public:
    void PrimitiveOperation1()
    {
        cout << "具体类B方法1实现" << endl;
    }

    void PrimitiveOperation2()
    {
        cout << "具体类B方法2实现" << endl;
    }
};

int main()
{
    AbstractClass *c;
    c = new ConcreteClassA();
    c->TemplateMethod();

    c = new ConcreteClassB();
    c->TemplateMethod;

    system("pause");
    return 0;
}

テンプレートメソッドはスーパークラスの動作を変更する動きを通じて優位性を反映している、サブクラスは、重複したコードを削除します。Template Methodパターンは良いプラットフォームのコードの再利用を提供することです。方法の可変および定常動作を混合サブクラスで実装される場合、同じ現象がサブクラスで繰り返されます。私たちは、このように変形しない絡みの重複サブクラスを取り除くために支援し、テンプレートメソッドパターンを介して移動するために、単一の場所にこれらのアクションを置きます。

おすすめ

転載: www.cnblogs.com/wfcg165/p/12004612.html