long long ago,我写过一个DHW大话务软件,当时对命令的处理就是采用命令模式。这里简要剖析一下,所有cmd类都继承一个base抽象类,这里会用到命令模式、函数模板。
//声明一个cmd基类/接口,主要包含execute方法
class ADhwCmdExeBase
{
public:
ADhwCmdExeBase()
{
}
virtual E_DhwCmdExeStatus ExecuteCmd(T_Message *pMsg) = 0;
virtual void LogCmd(void) /* 打印正在执行的命令 */
{
}
//...
private:
WORD32 m_dwExeInst;
WORD32 m_dwExeCount; /* 当前命令执行次数,例如wait指令,定时器每超时一次,记录一次 */
E_DhwCmdExeStatus m_eCmdExeSt;
T_DhwCommand m_tExeCmd; /* cmd的id、para等 */
};
//声明具体的cmd
class CDhwCmd_ChangeGroup:public ADhwCmdExeBase
{
public:
CDhwCmd_ChangeGroup(){
}
E_DhwCmdExeStatus ExecuteCmd(T_Message* pMsg); //实现具体的execute接口
};
class CDhwCmd_Delay:public ADhwCmdExeBase
{
public:
CDhwCmd_Delay(){
}
E_DhwCmdExeStatus ExecuteCmd(T_Message* pMsg); //实现具体的execute接口
};
/******************cmd管理类以及cmd的动态创建机制*********************/
//函数模板:用于cmd类的实例化
template<typename T>
ADhwCmdExeBase* CreatDhwExe(