定义:
一种对象行为型模式,可以实现调用者和接收者之间的完全解耦。而请求则被封装成了一个命令对象。
类比现实生活中的开关灯,我们(调用者 Invoker)只需要操作可以开灯的开关(指定命令),由指定命令去操作灯(接收者 Receiver)的打开和关闭。
而这里的灯开关就是我们的具体命令类 ConcreteCommand ,将具体的命令转给接收者去操作。
UML类图:
代码实现:
示例代码采用现实生活中的开关灯示例
1: 调用者
2:接收者
3:抽象命令类
4:具体命令类-开灯命令
5:具体命令类 - 关灯命令
7:客户端
8:结果
模式总结:
优势:
1:使用命令设计模式,可以实现调用者和接收者之间的完全解耦,调用者只需要调用开灯命令类的execute方法即可,不需要知道具体是哪个接收者执行的。
2:高扩展性,后续再增加其他命令的化,比如让保安负责每天的空调开启和关闭。只要增加一个接收者--空调,增加一个具体的空调开关命令即可,不会影响到调用者的代码变动
劣势:
随着保安手中持有的命令越来越多,造成我们的Command的子类越来越多,维护起来就会很麻烦。不过可以结合后面的模板方法模式,减少Command子类的膨胀问题。