行为模式之命令模式(Command Pattern)C++实现
命令模式(Command Pattern)行为模式.
命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
命令模式可以用在队列请求和日志请求。
餐厅对象对应到命令模式包括:command(订单),execute()(orderUP()),Client(顾客),Invoker(女招待),Receiver(快餐厨师),setCommand()(takeOrder())
命令模式的类图如下:
Client创建一个ConcreteCommand,并设置接收者。
Receiver接收者知道如何进行必要的工作,实现这个请求。任何类都可以当接收者。
Invoker这个调用者持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。
Command为所有的命令声明了一个接口,调用命令对象的execute()方法,就可以让接收者进行相关的动作。
遥控器的类图:
RemoteLoader相当于主调函数。RemoteControl相当于遥控器,用setCommand()装载命令,用onButtonWasPushed()来控制遥控器。LightOnCommand对象继承Command接口并持有一个接收者对象(如Light)。
流程如下:1.创建一个遥控器RemoteControl,即调用者对象Invoker。
2.创建接收者Light,即Receiver
3. 遥控器RemoteControl调用setCommand()装载命令。
4. RemoteControl控制命令
将请求封装在一个对象(command)中,并将请求的接受者放到具体的command中 (LightOnCommand)Receiver,从而实现调用操作的对象和操作的具体实现者之间的解耦。
HeadFirst 遥控器的例子实现C++
Receiver.h 头文件:
Receiver.CPP
Command.h头文件
Command.CPP源文件
Invoker.h头文件
Invoker.CPP
主函数main.CPP