命令模式(Command)
来源:互联网 发布:淘宝的试用中心在哪里 编辑:程序博客网 时间:2024/05/17 03:45
一、模式动机
在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。
二、模式定义
命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。
三、模式结构
四、参与者
- Command: 抽象命令类
- ConcreteCommand: 具体命令类
- Invoker: 调用者
- Receiver: 接收者
- Client:客户类
五、示例代码
package design.pattern;class Receiver { public void action() { System.out.println("Called Receiver.action()"); }}class Invoker { private Command command; public Invoker(Command command) { this.command = command; } public void setCommand(Command command) { this.command = command; } public void executeCommand() { command.execute(); }}public abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } public abstract void execute(); public static void main(String[] args) { Receiver r = new Receiver(); Invoker i = new Invoker(new ConcreteCommand(r)); i.executeCommand(); }}class ConcreteCommand extends Command { public ConcreteCommand(Receiver receiver) { super(receiver); } public void execute() { receiver.action(); }}
优点
- 降低系统的耦合度。
- 新的命令可以很容易地加入到系统中。
- 可以比较容易地设计一个命令队列和宏命令(组合命令)。
- 可以方便地实现对请求的Undo和Redo。
缺点
- 使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
模式使用
- 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
- 系统需要在不同的时间指定请求、将请求排队和执行请求。
- 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
- 系统需要将一组操作组合在一起,即支持宏命令。
2 0
- 命令模式--command模式
- 命令(Command)模式
- 命令模式(Command Pattern)
- 命令(Command)模式
- 命令者(Command)模式
- 命令模式(Command Pattern)
- 命令(Command)模式
- Command命令模式
- 命令模式(Command)
- Command Pattern(命令模式)
- Command 命令模式
- Command 命令模式
- 命令(Command)模式
- Command 命令模式
- 命令模式Command
- 命令模式(Command)
- 命令模式(Command)
- Command(命令模式)
- linux下shell显示-bash-4.1#不显示路径解决方法
- 【VS开发】【电子电路技术】RJ45以太网传输线研究
- 在Java Web应用程中
- matlab-高数 求二阶导
- springsource-tool-suite-update 最新各个版本下载地址(福利)
- 命令模式(Command)
- leader忙着改C文件和H文件
- matlab-高数 复合函数求导
- Yii2.0 关联查询
- 面向星辰大海,出发吧骚年!
- 前端性能优化---读书笔记
- hdu1072 Nightmare(bfs)
- 二分查找(递归和非递归写法)
- 学习Java其实应该上升到如何学习程序设计这种境界