19、命令模式(Command Pattern)

2020-08-25  本文已影响0人  火山_6c7b

1. 命令模式

1.1 简介

  命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

  将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 (来自《设计模式之禅》)

1.2 结构

Command模式uml:

Command模式uml.jpg

Command模式角色:

2. 示例

  司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。

  Invoker是调用者(司令员),Receiver是被调用者(士兵),MyCommand是命令,实现了Command接口,持有接收对象。

** Command:**

public interface Command {  
   public void exe();  
}

** MyCommand:**

public class MyCommand implements Command {  
 
   private Receiver receiver;  
     
   public MyCommand(Receiver receiver) {  
       this.receiver = receiver;  
   }  
 
   @Override  
   public void exe() {  
       receiver.action();  
   }  
}  

** Receiver:**

public class Receiver {  
   public void action(){  
       System.out.println("command received!");  
   }  
} 

** Invoker:**

public class Invoker {  
     
   private Command command;  
     
   public Invoker(Command command) {  
       this.command = command;  
   }  
 
   public void action(){  
       command.exe();  
   }  
}  

** 调用示例:**

   public static void main(String[] args) {  
       Receiver receiver = new Receiver();  
       Command cmd = new MyCommand(receiver);  
       Invoker invoker = new Invoker(cmd);  
       invoker.action();  
   } 

3. 总结

  命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开,熟悉Struts的同学应该知道,Struts其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想!

命令模式优点:

命令模式缺点:

命令模式适用场景:

上一篇下一篇

猜你喜欢

热点阅读