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:
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; }
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"; } };
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 (m.sbmmt.com)!