interface ICommand
{
virtual void Execute() = 0;
};
class ConcreteCmd : public ICommand
{
Worker m_impl;
ConcreteCmd(Implement *pImpl):m_impl(pImpl){}
void Excute()
{
m_impl->DoWork();
}
};
class Caller
{
ICommand m_pCmd;
void AddCmd(ICommand* pCmd){ m_pCmd = pCmd;}
void Action(){ m_pCmd->Execute();}
}
class Client
{
ConcreteCmd *m_pCmd;
Client(Worker impl){ m_pCmd = new ConcreteCmd(impl); }
ICommand GetCmd(){ return m_pCmd;}
SetCmd(ConcreteCmd* pCmd){ m_pCmd = pCmd; }
}
void main()
{
Client client = new Client(new Worker);
Caller caller = new Caller();
caller.add(client.GetCmd());
caller.Action():
}
要点:核心是Caller和ICommand,他们实现了任务和实现的分离,Client是辅助,实现接口实现的可适配
看设计模式不能抠字眼,一眼飘过,理解它的抽象和复用机制就行