读书人

举动模式之命令模式(Command Pattern)

发布时间: 2012-08-01 17:53:40 作者: rapoo

行为模式之命令模式(Command Pattern)C++实现

命令模式(Command Pattern)行为模式.

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

命令模式可以用在队列请求和日志请求。

餐厅对象对应到命令模式包括:command(订单),execute()(orderUP()),Client(顾客),Invoker(女招待),Receiver(快餐厨师),setCommand()(takeOrder())

命令模式的类图如下:

举动模式之命令模式(Command Pattern)C++实现

Client创建一个ConcreteCommand,并设置接收者。

Receiver接收者知道如何进行必要的工作,实现这个请求。任何类都可以当接收者。

Invoker这个调用者持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。

Command为所有的命令声明了一个接口,调用命令对象的execute()方法,就可以让接收者进行相关的动作。

遥控器的类图:

举动模式之命令模式(Command Pattern)C++实现

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




读书人网 >C++

热点推荐