最近学习Hystrix,它使用了命令模式来实现对服务调用操作的封装。正好借此机会记录一下命令模式。
简介
命令模式,将来自客户端的请求封装成一个对象,从而让你可以使用不同的请求对客户端进行参数化。
它可以被用于实现“行为请求者”与“行为实现者”的解偶,以便使两者可以适应变化。
命令模式中存在如下角色:
- Receiver
它是具体业务的执行者。 - Invoker
它是命令的调用者。 - Command接口
定义了命令应具备的操作。 - ConcreteCommand(CommandImpl)
它是Command接口的具体实现,绑定了命令与接收者之间的关系。
可以想象成Invoker是长官,Receiver是士兵,Command接口是长官都会下达哪些命令,ConcreteCommand是命令的具体实现(实际上是委托给Receiver)。
长官将命令交给士兵,命令指示士兵应该做什么。长官不需要知道士兵具体都做了什么,他只需要等待士兵反馈的结果。
Demo
-
Command接口
Command接口
-
Receiver
Receiver
-
MyCommand
MyCommand
-
Invoker
Invoker
-
调用程序
执行
-
结果
结果
适用场景
Invoker和Receiver关系非常类似于“请求”-“响应”模式,所以比较适用于记录日志、撤销操作、队列请求等。
网友评论