HeadFirst 设计模式笔记(六)—— 命令模式

命令模式所实现的就像餐馆里的“订单”对象:服务员不需要知道具体的订单内容,他只需要把订单对象传送给厨师就好了!如此一来,服务员与厨师就解耦了。
书中举了个遥控器的例子。遥控器需要控制多种电器的开关操作,比如有电灯和电视机。如果把打开电灯的操作直接实现在按钮函数中,那么电灯与遥控就成了紧耦合,如果电灯更新了,那么遥控器的代码也必须改变。
现在我们考虑把二者解耦,遥控器不需要知道具体开灯的步骤,我们会传给它一个实现了Command接口的类,而它只需调用execute方法即可,不需关心电灯到底是如何打开的,因为这些东西已经被封装在execute方法中。
public interface Command
{
public void execute();
}
public clqss LightOnCommand implements Command
{//实现execute方法...}
总之命令模式将“请求”封装成对象,以便使用不同的请求来参数化其他对象。我们封装“命令对象”的做法也可以支持撤销操作:只要把每次执行的命令记录下来就可以在需要时撤销到之前的状态。(当然Command接口里需要加入一个undo方法,不同的“命令”对象需要实现相应的撤销操作)
命令模式的更多用途:
  • 队列请求。想象有一个工作队列,一端用来添加命令,另一端命令不断被取出、执行。
  • 日志请求。某些应用需要我们将所有动作(“命令”)记录在日志中,一旦系统死机,只要重新执行这些命令即可恢复系统状态。这很像windows里系统还原点涉及到的功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章