结构
参与者
• Command
—声明执行操作的Execute接口。在实际的开发中也可以有别的选择,例如do/undo等。
• ConcreteCommand ( PasteCommand,OpenCommand )
— 具象Command类一般可以管理一个接收者实例作为操作的对象。
— 实现Execute操作。
• Client ( Appliction )
—创建一个具体命令对象并设定它的接收者。在实例的开发中,创建Command实例的Client和设定接收者的Client实例不一定是同一个。
• Invoker ( MenuItem )
—要求该命令对象执行这个请求。
• Receiver ( Document,Application )
—Execute操作的对象。接收者可以是任何类的实例。不同的Command可以有不同的接收者,不同的Command类可以处理不同类型、不同数量的接收者。
协作
• Client创建一个ConcreteCommand对象并指定它的Receiver对象。
• 某Invoker对象接收该ConcreteCommand对象。
• Invoker调用ConcreteCommand对象的执行操作。
•ConcreteCommand对象调用Receiver的一些操作以执行请求。
效果
1)Command模式可以将决定动作内容和执行动作分离,使二者可以在不同的时间和空间中进行。
2)通过扩展Command类的派生类,可以在不影响Invoker的情况下修改Invoker的动作。
3)可以使用简单命令进行组合成为一个复合命令。
4)增加新的Command对Client造成的负担也很小。
一句话,Command命令模式使选择处理的内容和决定处理的对象以及执行这个处理这三个动作可以分别进行。
注:文中类图来自《设计模式》一书。
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】,轻松学习每一天!
有任何疑问,欢迎留言提问或讨论。
面向对象设计,面向对象编程,面向对象思考!