乐趣区

模板模式

简介

模板模式,在基类中定义了算法(一系列步骤)的骨架,在一些子类中推迟了某些步骤的实现。模板模式让子类重新定义了一些步骤,而不用改变算法的骨架。

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;
}
退出移动版