Head First Design Patterns 阅读笔记之六: Command Pattern
2016-09-26 13:15
656 查看
从一个远程控制系统开始
假设我们要做一个远程控制系统,远端可以控制电灯、电子门的开关。远端并不需要知道具体的开关细节,用户只是按下按钮就可以控制电灯、电子门。显然,我们需要使用一种能够将方法调用封装起来的设计模式——Command Pattern。对于上面的需求,可以写下这样一个程序:
public interface Command { public void execute(); } public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.on(); } } public class SimpleRemoteControl { Command slot; public SimpleRemoteControl() {} public void setCommand(Command command) { slot = command; } public void buttonWasPressed() { slot.execute(); } } public class RemoteControlTest { public static void main(String[] args) { SimpleRemoteControl remote = new SimpleRemoteControl(); Light light = new Light(); LightOnCommand lightOn = new LightOnCommand(light); remote.setCommand(lightOn); remote.buttonWasPressed(); } }
Command Pattern 的正式定义
现在看看 Command Pattern 的正式定义:The Command Pattern encapsulates a request as an object, thereby lettting you parameterize other objects with different requests, queue or log requests, and support undoable operations.
一个命令对象封装了请求,这个请求把动作集合全部绑定到一个特定的接收器上。为了达到这样的效果,需要报动作和接收器打包进一个对象,外部只可以通过 excute() 方法执行。从外部来看,其他对象并不知道某个接收器执行了什么操作,调用者只知道如果他们调用 excute() 方法,他们的请求就会被执行。
目前并没有涉及到实现 logs 或支持 undo 的命令,有很多相对直接 Command Pattern 扩展就可以满足。后面的 Meta Command Pattern 可以创建大量命令并一次执行多种命令。
更多应用
queuing requests将任务放在队列中,线程选取队列头任务执行,执行完后再回来执行下一个任务。
logging requests
我们可以在 Command 接口中加两个方法 store() 和 load()。每次执行命令,就存贮一个对应的历史记录;如果系统崩溃,就重载命令。
相关文章推荐
- Head First Design Patterns 阅读笔记之七: Adapter and Facade Pattern
- Head First Design Patterns 阅读笔记之二: Observer Pattern
- Head First Design Patterns 阅读笔记之四: Factory Pattern
- Head First Design Patterns 阅读笔记之八: the Template Method Pattern
- OOP Design (Head First Design Patterns) 学习笔记--05 The factory Pattern
- Head First Design Patterns - Command Pattern
- Head First Design Patterns 阅读笔记之一: Strategy Pattern
- 《Head First Design Patterns》笔记二:观察者模式(Observer Pattern)
- 《Head First Design Patterns》笔记八:外观模式(Facade Pattern)
- head first design pattern 阅读笔记
- Head First Design Patterns 阅读笔记之五: Singleton Pattern
- Head First Design Patterns 阅读笔记之三: Decorator Pattern
- 《Head First Design Patterns》笔记六:命令模式(Command Pattern)
- OOP Design (Head First Design Patterns) 学习笔记--04 The decorator pattern
- OOP Design (Head First Design Patterns) 学习笔记--02 Summary One
- Head First Design patterns笔记-Decorator Patterns (从”用不同技能武装自己”看装饰模式)
- OOP Design (Head First Design Patterns) 学习笔记--03 Observer Pattern
- 《Head First Design Patterns》笔记七:适配器模式(Adapter Pattern)
- 《Head First Design Patterns》笔记十:迭代器模式(Iterator Pattern)
- 《Head First Design Patterns》笔记三:装饰者模式(Decorator Pattern)