-
抽象命令类 command:
- abstract execute方法:执行该命令(即自己)
-
具体命令类(针对不同场景,有不同的命令)
- 实现 execute方法:协调每个ReceiverImpl的业务逻辑
- 依赖的多个ReceiverImpl的属性和setter
-
抽象接受者类 Receiver:
- abstract doSomething方法:执行所属自己职能的业务逻辑。
-
接受者实现类 ReceiverImpl:
- 实现 doSomething 方法
-
负责人 Invoker类
- 抽象命令属性,带setter
- action方法:调用command.execute方法
使用例子
invoker = new Invoker();
command1 = new CommandImpl1();
invoker.setCommand(command1);
invoker.action();
总结
优点
- Invoker 和 Receiver 解耦
- 针对业务场景的变化,只需要修改或增加Receiver,并增加CommandImpl来应对新的变化,Invoker无需改动,只管接受新命令CommandImpl即可
- ReceiverImpl 类似同事,只管做好自己的职能,提供专属业务方法;Command类似中介,N个场景有N个CommandImpl,协调各个ReceiverImpl合作达到业务场景需求;Invoker可以理解成暴露给外部的服务。
缺点
随着业务场景的多样性,CommandImpl的数量可能会膨胀不好管理。