命令模式
来源:互联网 发布:windows 10 ie崩溃 编辑:程序博客网 时间:2024/06/07 07:06
定义
在软件系统中,“行为请求者”与“行为实现者”通常是紧耦合,即行为请求者直接调用行为实现者。这种紧耦合情况下,如果要对行为进行:记录、撤销/重做、事务等处理,非常苦难,因为很可能需要修改实现者的代码。
通过传送命令的方式将行为请求者与行为实现者解耦,这就是命令模式。
类结构图
Command:定义命令的接口,一般就是声明execute方法;
ConcreteCommand:命令接口的实现对象(命令对象),通常会有接收者,并用调用者的功能来完成命令要执行的操作;
Receiver:真正执行命令的对象;
Invoker:这是客户端真正出发命令并要求执行相应操作的地方,也就是说相当于使用命令对象的入口;这个对象负责持有命令对象,相当于一个中间服务器,负责接收和转发命令;
Client(Assembler):具体命令的创建者,并指定命令对象的接受者(Receiver),然后把创建的命令对象传给Invoker保存起来,这样真正的客户端调用invoker就可以执行指定命令了,并不是每次要执行某个命令都需要创建一个命令。另外,为了准确调用命令,在Invoker中每个命令应该是唯一的。和传统的客户端不同,因此理解为装配者可能更合适。
注意:命令模式中的解耦指的是Invoker和Receiver之间的解耦,而不是Client和Receiver之间的解耦。
协同图
1. Client创建命令,并指定命令执行者;
2. Client把命令传递给Invoker;Invoker把命令存储起来,因此可以重复使用,并不是每次执行某个命令都需要创建一个命令。为了准确调用,每个命令应该是唯一的
3. Invoker负责调用Command的execute方法,command调用Receiver的行为完成命令执行;
缺点
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
优点
Invoker可以存储很多的命令对象,而不用关心Receiver是谁,
实例
电视机遥控器:电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- javascript自定义事件
- javascript Date format(js日期格式化)
- wince菜鸟入门问题记录一
- 人体运动识别:motionlet: Mid-level 3D level parts for human motion recognition
- Java web 开发必游之路-给入门者的一些建议
- 命令模式
- Android中Context详解 ---- 你所不知道的Context
- 枚举---知识总结----------gyy加以整理以及改为C++方法
- 使用 spring web 3.0 配置web.xml
- 23种设计模式总结
- jsp中forward和redirect区别
- eclipse安装后启动不了
- 杭电OJ 1789:Doing Homework again
- 安卓SQLite 根据某一字段查询一条数据 根据某一字段排序 添加 修改 删除某一字段等于某某的那一条数据