设计模式_命令模式(21)
来源:互联网 发布:网络测试工程师 编辑:程序博客网 时间:2024/06/01 10:43
- 什么是命令模式
- 命令模式的例子
- 命令模式的优缺点
- 命令模式的使用场景
- 闲言碎语
什么是命令模式
我们想象一个场景:在军队中,我们要完成一场战斗.我们都知道,将军不可能跑到买个士兵面前去下达自己的命令.他一般都是安排给自己手下的副将.然后由自己的副将一级级去传达.根据士兵所处的位置和能力安培给他们相应的任务.当然在程序中我们也可能会遇到类似的问题.这时我们就要用到命令模式了.
定义:将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。
结构:
抽象命令(Command):定义命令的接口,声明执行的方法。
具体命令(ConcreteCommand):具体命令,实现要执行的方法,它通常是“虚”的实现;通常会有接收者,并调用接收者的功能来完成命令要执行的操作。
接收者(Receiver):真正执行命令的对象。任何类都可能成为一个接收者,只要能实现命令要求实现的相应功能。
调用者(Invoker):要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
客户端(Client):命令由客户端来创建,并设置命令的接收者。
UML:
命令模式的例子
抽象命令的接口
package com.designPattern.command;/** * 命令(将军的的接口) * * @author Jason * */public interface Command {// 发布命令public void sendOrder();}
命令的转发者,命令模式的核心
package com.designPattern.command;/** * 命令的转发者(可以认为是比将军低一级和多级的人) * * @author Jason * */public class Invoker {private Command command;// 命令的传递public Invoker(Command command) {this.command = command;}public void action() {System.out.println("发布命令!");command.sendOrder();}}
命令的发布者
package com.designPattern.command;/** * 实际的命令发布者(将军) * * @author Jason * */public class MyCommand implements Command { private Receive receiver; // 实际的命令执行者 public MyCommand(Receive receiver) { this.receiver = receiver; } @Override // 发布命令 public void sendOrder() { receiver.action(); }}}
命令执行者的接口
package com.designPattern.command;/** * 执行命令的接口(可以认为是士兵的抽象) * * @author Jason * */public interface Receive {// 执行的方法public void action();}
具体的命令执行者
package com.designPattern.command;/** * 执行命令者(具体的士兵) * * @author Jason * */public class Receiver implements Receive {// 执行命令public void action() {System.out.println("execute action!");}}测试类
package com.designPattern.command;import org.junit.Test;/** * 测试类 * * @author Jason * */public class Testcase { @Test public void test() { // 实例化一个士兵 Receive receiver = new Receiver(); // 实例化一个将军并交个他一个士兵 Command cmd = new MyCommand(receiver); // 实例化一个副将并为他指定已经将军 Invoker invoker = new Invoker(cmd); // 向将军请求指令并且传达给小兵 invoker.action(); }}
命令模式的优缺点
优点:1、降低了系统耦合度。2、新的命令可以很容易添加到系统中去。
缺点:使用命令模式可能会导致某些系统有过多的具体命令类。
命令模式的使用场景
认为是命令的地方都可以使用命令模式,比如:1、GUI 中每一个按钮都是一条命令。2、模拟 CMD。
闲言碎语
在struts2中的action使用了命令模式.有兴趣的可以去看看.
- 设计模式_命令模式(21)
- 设计模式_命令模式
- 设计模式_命令模式
- 设计模式_命令模式
- 设计模式_命令模式
- java设计模式_命令模式
- java设计模式_命令模式
- 大话设计模式_命令模式
- java设计模式_命令模式
- 安卓设计模式_命令模式
- java设计模式15_命令模式
- php设计模式_命令模式
- javascript设计模式_第二部分_命令模式
- Java设计模式_(行为型)_命令模式
- 大话设计模式_命令模式c++实现
- HeadFirst设计模式_读书笔记_005_命令模式
- 设计模式---命令模式
- 设计模式-命令模式
- 分享一个工具类---SharedPreferences
- 多台服务器共享session问题浅析
- Mongo数据库
- oracle 12c误删pdb数据文件导致整个数据库无法打开问题
- Effective C++ 11. Handle assignment to self in operator=
- 设计模式_命令模式(21)
- koa入门教程
- Spring Cloud分布式微服务云架构服务组件
- day15MySQL数据库操作
- ARM和x86比较
- moni1
- java编程思想学习笔记(一)——java类与c++类的区别
- IDEA 快捷键集合
- kafka环境搭建—“找不到或无法加载主类config.zookeeper.properties” "找不到或无法加载主类config.server.properties"