在许多设计中,经常设计一个对象请求另一个对象执行某一个操作。如果请求者无法或者不希望直接和被请求者打交道,即请求对象无法或者不希望含有被请求者的引用,那么可以使用命令模式。命令模式里称提出请求的对象为请求者,被请求者的对象为接收者。在命令模式中,当一个对象请求另一个对象调用其方法时,不和被请求者直接打交道,而是把这种“请求”封装到一个“命令”对象中,封装的手段将“请求”封装到“命令”对象的一个方法中。命令模式的核心就是使用命令对象来封装方法调用。
例如,在军队作战时,指挥官要命令三连偷袭敌人。但是指挥官这时无法或者不希望和三连直接取得联系,那么指挥官可以发出一个命令,把该命令的执行者设置为三连。这样指挥官只要和命令打交道。
命令模式包含四种角色:
接收者:接收者是一个类的实例,该实例负责执行与请求相关的操作。
命令接口:命令式一个接口,免备案空间,规定了用来封装“请求”的若干个方法,香港空间,比如execute()、undo()等方法。
具体命令:具体命令式实现了命令接口的类的实例,香港虚拟主机,包含命令接口的方法。并且包含接受者的引用,指明那个对象去执行该命令。
请求者:请求者是包含命令接口变量类的实例,该接口变量可以存放任何具体命令的引用。请求者负责调用具体命令,让具体命令执行那些封装了的请求方法。
下面看军队作战的例子:
1.命令接收者:
1 package com.command; CompanyArmy { sneakAttack(){5System.out.println(“我们知道如何袭击敌人,保证完成任务”);6 }7 }你在会议中吵架时,尼泊尔的背包客一起端起酒杯坐在火堆旁。