命令模式(Command)
1、本质:
封装请求
2、定义:
把一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作
3、核心:
原本“行为请求者”和“行为执行者”是紧紧耦合的,但是在某些应用(如:记录、撤销、事物等)中,这种紧耦合是无法适应的。
所以,将这个“行为”抽象为一个对象,实现“行为请求者”和“行为执行者”之间的松散耦合。
4、角色:

Command:所有命令的统一接口
ConcreteCommand:具体命令
Receiver:行为执行者
Invoker:行为请求者
5、例子:
Command接口:
1 public interface Command{ 2 public void execute(); 3 }
具体命令类:
1 public class ConcreteCommand implements Command{ 2 //持有接受者对象 3 public Receiver receiver; 4 //命令对象可以拥有自己的状态 5 public String state; 6 7 public ConcreteCommand(Receiver receiver){ 8 this.receiver = receiver; 9 } 10 11 public void execute(){ 12 //转调接收者对象的实际操作方法 13 receiver.action(); 14 } 15 }
接收者:
1 public class Receiver( 2 //示意方法,具体执行的命令相应的操作 3 public void action(){ 4 //...... 5 } 6 )
Invoker:
1 /** 2 * 行为请求者 3 */ 4 public class Invoker{ 5 6 private Command command; 7 8 public setCommand(Command command){ 9 this.command = command; 10 } 11 //请求命令 12 public void runCommand(){ 13 command.execute(); 14 } 15 16 }
6、可撤销的命令:
6.1、补偿式(反操作式):
加-->减 打开-->关闭
6.2、存储恢复式:
记录操作前的状态,在需要时恢复
7、宏命令:
一个命令中包含多个命令
8、命令模式的优点:
1、更松散的耦合
2、更动态的控制
3、更好的扩展性
4、很自然的符合命令(宏命令)

浙公网安备 33010602011771号