[设计模式]命令模式(Command)

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

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

java\] [view plain](http://blog.csdn.net/zhangerqing/article/details/8243942 "view plain") [copy](http://blog.csdn.net/zhangerqing/article/details/8243942 "copy") 1. public interface Command { 2. public void exe(); 3. } \[java\] [view plain](http://blog.csdn.net/zhangerqing/article/details/8243942 "view plain") [copy](http://blog.csdn.net/zhangerqing/article/details/8243942 "copy") 1. public class MyCommand implements Command { 2. 3. private Receiver receiver; 4. 5. public MyCommand(Receiver receiver) { 6. this.receiver = receiver; 7. } 8. 9. @Override 10. public void exe() { 11. receiver.action(); 12. } 13. } \[java\] [view plain](http://blog.csdn.net/zhangerqing/article/details/8243942 "view plain") [copy](http://blog.csdn.net/zhangerqing/article/details/8243942 "copy") 1. public class Receiver { 2. public void action(){ 3. System.out.println("command received!"); 4. } 5. } \[java\] [view plain](http://blog.csdn.net/zhangerqing/article/details/8243942 "view plain") [copy](http://blog.csdn.net/zhangerqing/article/details/8243942 "copy") 1. public class Invoker { 2. 3. private Command command; 4. 5. public Invoker(Command command) { 6. this.command = command; 7. } 8. 9. public void action(){ 10. command.exe(); 11. } 12. } \[java\] [view plain](http://blog.csdn.net/zhangerqing/article/details/8243942 "view plain") [copy](http://blog.csdn.net/zhangerqing/article/details/8243942 "copy") 1. public class Test { 2. 3. public static void main(String\[\] args) { 4. Receiver receiver = new Receiver(); 5. Command cmd = new MyCommand(receiver); 6. Invoker invoker = new Invoker(cmd); 7. invoker.action(); 8. } 9. } 输出:command received! 这个很哈理解,命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开,熟悉Struts的同学应该知道,Struts其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想!

相关推荐
摘星编程4 小时前
CodeBuddy 辅助重构:去掉 800 行 if-else 的状态机改造
设计模式·代码重构·技术债务·codebuddy·状态机模式
Meteors.4 小时前
23种设计模式——策略模式 (Strategy Pattern)详解
设计模式·策略模式
念念不忘 必有回响15 小时前
js设计模式-装饰器模式
javascript·设计模式·装饰器模式
Meteors.15 小时前
23种设计模式——代理模式(Proxy Pattern)详解
设计模式·代理模式
晨星05271 天前
软件设计模式之单例模式
单例模式·设计模式
Meteors.1 天前
23种设计模式——装饰器模式(Decorator Pattern)详解
java·设计模式·装饰器模式
谢栋_1 天前
设计模式从入门到精通之(六)策略模式
设计模式·bash·策略模式
the sun341 天前
常见的设计模式(3)工厂模式
设计模式
小蜗牛在漫步1 天前
23种设计模式-模板方法模式
设计模式·模板方法模式
念念不忘 必有回响1 天前
js设计模式-状态模式
javascript·设计模式·状态模式