用对象表示“命令”来保存命令历史记录和重复执行命令。
示例
一个画图软件,用户拖动鼠标时程序会绘制出红色圆点,点击clear按钮后会清除所有的圆点。
类图
时序图
Command接口
1 | package command; |
MacroCommand类
1 | package command; |
DrawCommand类
1 | package drawer; |
Drawable接口
1 | package drawer; |
DrawCanvas类
1 | package drawer; |
Main类
1 | import command.Command; |
运行结果
登场角色
Command(命令)
Command角色负责定义命令的接口(API)。在示例程序中,由Command接口扮演此角色。
ConcreteCommand(具体的命令)
ConcreteCommand角色负责实现在Command角色中定义的接口(API)。在示例程序中,由MacroCommand类和DrawCommand类扮演此角色。
Receiver(接受者)
Receiver角色是Command角色执行命令时的对象,也可以称其为命令接收者。在示例程序中,由DrawCanvas类接收DrawCommand的命令。
Client(请求者)
Client角色负责生成ConcreteCommand角色并分配Receiver角色。在示例程序中,由Main类扮演此角色。在相应鼠标拖拽事件时,它生成了DrawCommand类的实例,并将扮演Receiver角色的DrawCanvas类的实例传递给了DrawCommand类的构造函数。
Invoker(发动者)
Invoker角色是开始执行命令的角色,它会调用在Command角色中定义的接口(API)。在示例程序中,由Main类和DrawCanvas类扮演此角色。这两个类都调用了Command接口中的execute方法。Main类同时扮演了Client角色和Invoker角色。