Eine kurze Einführung in C++-Entwurfsmuster, Vorlagenmethodenmuster

黄舟
Freigeben: 2017-01-18 14:54:53
Original
1333 Leute haben es durchsucht

Vorlagenmethodenmuster: Definieren Sie das Grundgerüst eines Algorithmus in einer Operation, während Sie einige Schritte auf Unterklassen verschieben. Mithilfe von Vorlagenmethoden können Unterklassen bestimmte Schritte eines Algorithmus neu definieren, ohne die Struktur des Algorithmus zu ändern.

Ein geeigneter Zeitpunkt: Wenn wir einen Prozess oder eine Reihe von Schritten abschließen möchten, die auf einer bestimmten Detailebene konsistent sind, die Umsetzung einzelner Schritte auf einer detaillierteren Ebene jedoch unterschiedlich sein kann, denken wir normalerweise darüber nach Verwenden von Vorlagen zur Verarbeitung von Methodenmustern.

Zwei Rollen von Vorlagenmethoden:

Abstrakte Klasse (AbstractClass): Gibt den Rahmen der Logik der obersten Ebene an.

Konkrete Produktklasse (ConcreteClass): Bei der Implementierung der Definition von die übergeordnete Klasse Eine oder mehrere abstrakte Methoden. Eine AbstractClass kann mehrere ConcreteClass haben.

Strukturdiagramm:

Eine kurze Einführung in C++-Entwurfsmuster, Vorlagenmethodenmuster


Testfall:

[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;
}
Nach dem Login kopieren

Vorlagenmethodenimplementierung:

[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";
    }
};
Nach dem Login kopieren

Funktionen der Vorlagenmethode:

Das Vorlagenmethodenmuster spiegelt seine Vorteile wider, indem es unverändertes Verhalten in die übergeordnete Klasse verschiebt und doppelten Code in der Unterklasse entfernt.

Das Vorlagenmethodenmuster bietet eine gute Plattform für die Wiederverwendung von Code.

Das Obige ist der Inhalt einer kurzen Einführung in das Vorlagenmethodenmuster von C++-Entwurfsmustern. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage