[设计模式]命令模式(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其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想!

相关推荐
ximu_polaris1 小时前
设计模式(C++)-结构型模式-享元模式
c++·设计模式·享元模式
geovindu1 小时前
go: Facade Pattern
设计模式·golang·外观模式
旷世奇才李先生2 小时前
React 18\+TypeScript实战: hooks封装与组件设计模式
react.js·设计模式·typescript
白夜11173 小时前
C++设计模式(高内聚,低耦合)
c++·设计模式
ximu_polaris3 小时前
设计模式(C++)-结构型模式-桥接模式
c++·设计模式·桥接模式
楼田莉子3 小时前
仿muduo库的高并发服务器——正则表达式与any类介绍及其简单模拟实现
linux·服务器·c++·学习·设计模式
workflower3 小时前
机器人应用-室外区域巡逻
人工智能·设计模式·机器人·软件工程·软件构建
geovindu5 小时前
go: Flyweight Pattern
开发语言·设计模式·golang·享元模式
志摩凛18 小时前
被产品经理逼疯后,我们重构了移动端上传组件——2026最新成果复盘
设计模式·架构
ximu_polaris21 小时前
设计模式(c++)-结构型模式-装饰器模式
c++·设计模式·装饰器模式