定义:命令模式就是将请求发出者和请求执行者进行分离,并且创建一个中间类,来负责请求发出和执行的交互,这样能降低系统耦合度,方便未来系统的更新和维护。
UML图:
优点:方便未来新命令的添加。
缺点:使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
适用场景:对一些需求容易改动的地方,场景又类似于这种 发出请求-执行 业务流程的,使用命令模式会带来很多便利。
场景举例:
有一个指挥官今天需要命令三连去袭击敌营,那么设计可以为:
版本1
指挥官命令类Command:
命令执行类 Receiver
但是明天发布的命令可能不一样,上面的设计无法满足未来的需要,所以:
版本2
命令接口:Command
命令实现类:ConcreteCommand(三连袭击敌营)
命令接收者:Receiver(三连)
这样虽然可以满足未来不定的需求,但是业务逻辑却暴露了,应该将请求发出和请求执行的逻辑流程封装起来,对外提供方法调用。所以最后为:
版本3
命令接口:Command
命令实现类:ConcreteCommand(三连袭击敌营)
命令接收者:Receiver(三连)
客户端调用者(业务逻辑封装类):invoker
代码实现;
最近在学设计模式,收获很多,现在尝试着去总结一下,有些地方还是不能很好的表达出来,出入之处,还望指正。