设计模式之模板方法模式
个人初步理解:模板方法是通过父类调用子类的实现。
基类:抽象父类
#pragma once class AbstractClass { public: virtual ~AbstractClass(); void TemplateMethod(); protected: AbstractClass(); virtual void PrimitiveOperation1() = 0; virtual void PrimitiveOperation2() = 0; };
#include "AbstractClass.h" AbstractClass::AbstractClass() { } AbstractClass::~AbstractClass() { } void AbstractClass::TemplateMethod() { this->PrimitiveOperation1(); this->PrimitiveOperation2(); }
派生类1
#pragma once #include "AbstractClass.h" class ConcreateClass1 : public AbstractClass { public: ConcreateClass1(); ~ConcreateClass1(); protected: void PrimitiveOperation1(); void PrimitiveOperation2(); };
#include "ConcreateClass1.h" #include <iostream> ConcreateClass1::ConcreateClass1() { } ConcreateClass1::~ConcreateClass1() { } void ConcreateClass1::PrimitiveOperation1() { std::cout << "ConcreateClass1...PrimitiveOperation1..." << std::endl; } void ConcreateClass1::PrimitiveOperation2() { std::cout << "ConcreateClass1...PrimitiveOperation2..." << std::endl; }
派生类2
#pragma once #include "AbstractClass.h" class ConcreateClass2 : public AbstractClass { public: ConcreateClass2(); ~ConcreateClass2(); protected: void PrimitiveOperation1(); void PrimitiveOperation2(); };
#include "ConcreateClass2.h" #include <iostream> ConcreateClass2::ConcreateClass2() { } ConcreateClass2::~ConcreateClass2() { } void ConcreateClass2::PrimitiveOperation1() { std::cout << "ConcreateClass2...PrimitiveOperation1" << std::endl; } void ConcreateClass2::PrimitiveOperation2() { std::cout << "ConcreateClass2...PrimitiveOperation2" << std::endl; }
测试
#include <iostream> #include "ConcreateClass1.h" #include "ConcreateClass2.h" int main() { AbstractClass *p1 = new ConcreateClass1(); AbstractClass *p2 = new ConcreateClass1(); p1->TemplateMethod(); p2->TemplateMethod(); if (p1) { delete p1; p1 = NULL; } if (p2) { delete p2; p2 = NULL; } std::cout << "Hello World!\n"; }

浙公网安备 33010602011771号