首页 > 代码库 > Template_Method
Template_Method
#include <iostream>using namespace std;#define DESTROY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; }class TemplateMethod{public: void AlgorithmA() { Step1(); Step2(); Step3(); } void AlgorithmB() { Step3(); Step2(); Step1(); } protected: virtual void Step1()=0; virtual void Step2()=0; virtual void Step3()=0;};class ConcreteTemplateA : public TemplateMethod{public: ConcreteTemplateA() {} ~ConcreteTemplateA() {}protected: void Step1() { cout<<"ConcreteTemplateA::Step1"<<endl; } void Step2() { cout<<"ConcreteTemplateA::Step2"<<endl; } void Step3() { cout<<"ConcreteTemplateA::Step3"<<endl; }};class ConcreteTemplateB : public TemplateMethod{public: ConcreteTemplateB() {} ~ConcreteTemplateB() {}protected: void Step1() { cout<<"ConcreteTemplateB::Step1"<<endl; } void Step2() { cout<<"ConcreteTemplateB::Step2"<<endl; } void Step3() { cout<<"ConcreteTemplateB::Step3"<<endl; }};int main(int argc, char *argv[]){ TemplateMethod* pTemplate = NULL; pTemplate = new ConcreteTemplateA; pTemplate->AlgorithmA(); DESTROY_POINTER(pTemplate); pTemplate = new ConcreteTemplateB; pTemplate->AlgorithmB(); DESTROY_POINTER(pTemplate); return 0;}
Template_Method
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。