命令模式(Command)

1、本质:

  封装请求

2、定义:

  把一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作

3、核心:

  原本“行为请求者”和“行为执行者”是紧紧耦合的,但是在某些应用(如:记录、撤销、事物等)中,这种紧耦合是无法适应的。

  所以,将这个“行为”抽象为一个对象,实现“行为请求者”和“行为执行者”之间的松散耦合。

4、角色:

  

  Command:所有命令的统一接口

  ConcreteCommand:具体命令

  Receiver:行为执行者

  Invoker:行为请求者

5、例子:

Command接口:

1 public interface Command{
2     public void execute();
3 }
View Code

 具体命令类:

 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 }
View Code

 

接收者:

1 public class Receiver(
2     //示意方法,具体执行的命令相应的操作
3     public void action(){
4         //......
5     }
6 )
View Code

 

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 }
View Code

 

6、可撤销的命令:

  6.1、补偿式(反操作式):

     加-->减      打开-->关闭

  6.2、存储恢复式:

     记录操作前的状态,在需要时恢复

7、宏命令:

  一个命令中包含多个命令

8、命令模式的优点:

  1、更松散的耦合

  2、更动态的控制

  3、更好的扩展性

  4、很自然的符合命令(宏命令)

posted @ 2014-04-27 11:43  无名十四  阅读(260)  评论(0)    收藏  举报