HeadFirst 设计模式笔记(六)—— 命令模式
2013-01-13 05:50
281 查看
命令模式所实现的就像餐馆里的“订单”对象:服务员不需要知道具体的订单内容,他只需要把订单对象传送给厨师就好了!如此一来,服务员与厨师就解耦了。
书中举了个遥控器的例子。遥控器需要控制多种电器的开关操作,比如有电灯和电视机。如果把打开电灯的操作直接实现在按钮函数中,那么电灯与遥控就成了紧耦合,如果电灯更新了,那么遥控器的代码也必须改变。
现在我们考虑把二者解耦,遥控器不需要知道具体开灯的步骤,我们会传给它一个实现了Command接口的类,而它只需调用execute方法即可,不需关心电灯到底是如何打开的,因为这些东西已经被封装在execute方法中。
public interface Command
{
public void execute();
}
public clqss LightOnCommand implements Command
{//实现execute方法...}
总之命令模式将“请求”封装成对象,以便使用不同的请求来参数化其他对象。我们封装“命令对象”的做法也可以支持撤销操作:只要把每次执行的命令记录下来就可以在需要时撤销到之前的状态。(当然Command接口里需要加入一个undo方法,不同的“命令”对象需要实现相应的撤销操作)
命令模式的更多用途:
队列请求。想象有一个工作队列,一端用来添加命令,另一端命令不断被取出、执行。
日志请求。某些应用需要我们将所有动作(“命令”)记录在日志中,一旦系统死机,只要重新执行这些命令即可恢复系统状态。这很像windows里系统还原点涉及到的功能。
书中举了个遥控器的例子。遥控器需要控制多种电器的开关操作,比如有电灯和电视机。如果把打开电灯的操作直接实现在按钮函数中,那么电灯与遥控就成了紧耦合,如果电灯更新了,那么遥控器的代码也必须改变。
现在我们考虑把二者解耦,遥控器不需要知道具体开灯的步骤,我们会传给它一个实现了Command接口的类,而它只需调用execute方法即可,不需关心电灯到底是如何打开的,因为这些东西已经被封装在execute方法中。
public interface Command
{
public void execute();
}
public clqss LightOnCommand implements Command
{//实现execute方法...}
总之命令模式将“请求”封装成对象,以便使用不同的请求来参数化其他对象。我们封装“命令对象”的做法也可以支持撤销操作:只要把每次执行的命令记录下来就可以在需要时撤销到之前的状态。(当然Command接口里需要加入一个undo方法,不同的“命令”对象需要实现相应的撤销操作)
命令模式的更多用途:
队列请求。想象有一个工作队列,一端用来添加命令,另一端命令不断被取出、执行。
日志请求。某些应用需要我们将所有动作(“命令”)记录在日志中,一旦系统死机,只要重新执行这些命令即可恢复系统状态。这很像windows里系统还原点涉及到的功能。
相关文章推荐
- HeadFirst 设计模式学习笔记6--命令模式
- HeadFirst 设计模式学习笔记6--命令模式
- 【HeadFirst 设计模式学习笔记】6 命令模式
- HeadFirst 设计模式学习笔记8--模板方法模式
- HeadFirst 设计模式学习笔记15--责任链模式拾零
- HeadFirst 设计模式学习笔记5--单例模式
- 【HeadFirst 设计模式学习笔记】7 适配器模式和外观模式
- 【HeadFirst 设计模式学习笔记】21 备忘录(Memento)模式拾零
- HeadFirst 设计模式学习笔记19--原型(Prototype)模式拾零
- HeadFirst 设计模式学习笔记11——状态模式
- HeadFirst 设计模式阅读笔记(一)—— strategy
- HeadFirst 设计模式笔记(四)—— 工厂模式
- 【设计模式学习笔记十五】【行为模式】【命令模式(Command)】
- 【HeadFirst 设计模式学习笔记】2 观察者模式
- HeadFirst 设计模式学习笔记6--适配器模式和外观模式
- HeadFirst 设计模式学习笔记16--享元模式拾零
- 【HeadFirst 设计模式学习笔记】13 MVC分析
- 设计模式笔记:命令模式
- 设计模式学习笔记--命令模式command pattern(Java版)
- Java-马士兵设计模式学习笔记-命令模式