(本文中一些例子和定义均摘自《Head First 设计模式》)
命令模式(Command Pattern)
将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤消的操作。
举例:开灯的命令
首先我们定义一个命令接口,所有的命令都应当实现这个接口




在Light类中,厂商定义了开和关的命令












接着我们需要把命令封装成对象































设定使用命令的方式

















测试一下开灯,关灯


















命令模式也可以用于撤消一系列的命令
我们应当记录下一系列的命令操作















































在这里 发现每次设置命令都应当判断此处是否已经存在命令。但是每次都判断比较烦琐
所以:











确保每个插槽都有一个命令对象。
然后需要给Command接口中加入撤消操作的方法





并且在所有具体的命令中实现这个方法。



















重新设计一个控制台


























































测试一下undo


































这种模式更多的被应用在队列请求和日志中
比如当系统发生异常的时候,我们可以根据日志来要求事务的回滚,回到原先正常的状态。