我们将把封装带到一个全新的境界:把方法调用(method invocation)封装起来。
命令模式可将“动作的请求者” 从 “动作的执行者”中解耦。在设计中采用“命令对象”,利用命令对象,把请求(例如打开电灯)封装成一个特定的对象(例如客厅电灯对象)。所以,每个按钮都存储一个命令对象,那么当按钮被按下的时候,就可以请命令对象做相关的工作。遥控器并不知道工作内容是什么,只要有个命令对象能和正确的对象沟通,把事情做好就可以了。所以,遥控器和电灯对象解耦了。
加载调用者
1,客户创建一个命令对象。
2,客户利用setCommand()将命令对象存储在调用者中。
3,稍后。。。。客户要求调用者执行命令。请注意,就像在本章稍后会看到的:一旦命令被加载到调用者,该命令可以被使用并丢弃,或者可以被保留下来并使用多次。
命令模式的定义:
将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
现在,仔细看这个定义。我们知道一个命令对象通过在特定接受者上绑定一组动作来封装一个请求。要达到这一点,命令对象将动作和接受者包进对象中。这个对象只暴露出一个execute()