Command命令的调用者Invoker和接收者Receiver解耦
概念理解
-
定义:又称为动作(Action)模式或事务(Transaction)模式。
Command.png
将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
Receiver: 接收者
Command: 抽象命令类,需要指定接收者Receiver
ConcreteCommand: 具体命令类
Invoker: 调用者,需要指定需要执行的哪个命令Command
应用和优缺点
-
解决的问题:
命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。 -
应用实例
struts 1 中的 action 核心控制器 ActionServlet 只有一个,相当于 Invoker,而模型层的类会随着不同的应用有不同的模型类,相当于具体的 Command。 -
使用场景:
系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
系统需要在不同的时间指定请求、将请求排队和执行请求。
系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
系统需要将一组操作组合在一起,即支持宏命令 -
优点
降低系统的耦合度
新的命令可以很容易地加入到系统中
可以比较容易地设计一个命令队列和宏命令(组合命令)
可以方便地实现对请求的Undo和Redo -
缺点
可能会导致某些系统有过多的具体命令类,增加系统的复杂性。
网友评论