简介
模板模式,在基类中定义了算法(一系列步骤)的骨架,在一些子类中推迟了某些步骤的实现。模板模式让子类重新定义了一些步骤,而不用改变算法的骨架。
UML 类图
示例
模板模式,在实际中比较常见。现在的软件经常有很多服务的进程构成,每个服务的步骤大都差不多,初始化,设置日志文件,释放资源等。
模板相关类,template.h
#ifndef TEMPLATE_H
#define TEMPLATE_H
class CAbstratctService
{
public:
CAbstratctService(){m_bExit = false;}
virtual void Init() = 0;// read the config.
virtual void SetLogFileName() = 0;
virtual void Fini() = 0;
virtual void Run()
{SetLogFileName();
Init();
while(!m_bExit)
{;//to do some thing}
}
private:
bool m_bExit;
};
class CServiceA:public CAbstratctService
{
public:
void Init(){/*Read the config file of Service A.*/}
void SetLogFileName(){/*Set the name of the log file.*/}
void Fini(){/*Release*/}
};
class CServiceB:public CAbstratctService
{
public:
void Init(){/*Read the config file of Service A.*/}
void SetLogFileName(){/*Set the name of the log file.*/}
void Fini(){/*Release*/}
};
#endif
客户端调用,main.cpp
#include "template.h"
#define SAFE_DELETE(p) if(p){delete (p); (p) = 0;}
int main(int argc, char* argv[])
{
CAbstratctService* pService = new CServiceA;
pService->Run();
SAFE_DELETE(pService);
return 0;
}