设计模式之命令模式(Command)

命令模式:将“请求/命令”封装成对象,无需了解这个请求的执行者以及处理细节。

谁来执行和处理这个命令对于命令的发号者来说并不关心,发号命令者只管发号施令而不关注执行者以及执行细节,而命令的执行者只管执行命令而不关注命令是由谁来发号的。命令模式能将发号施令者与命令的执行者解耦。他们只需要关注于命令对象。命令模式可能会产生额外的很多的子类,给系统增加复杂性。

命令模式UML图:


命令模式时序图:


根据单一职责的设计原则,通常我们会把一个命令(do something)封装为一个Command对象,有时我们也会一个命令的一组行为(such as:do something/undo something,but the something must be the same thing.)封装为一个Command对象。

宏命令

一个命令他包含有一组其他的命令,当宏命令execute方法被调用时,他会调用一组命令的execute方法,各个不同的command对象有他们自己的Receiver,如图所示:


宏命令类图上和装饰者模式有类似之处,装饰者与被装饰者都有着相同的父类,且装饰者有被装饰者的引用。也就是说一个宏命令不仅能装饰普通的命令对象(可能是简单的委托调用,也可能装饰些新的功能),他自己也能被其他的宏命令对象装饰。

不是所有的Command对象都有自己的Receiver,他们也可以自己执行命令,而且没有Receiver的Command很常见。

参考资料:

Head First 设计模式 (中国电力出版社)

猜你喜欢

转载自ktian.iteye.com/blog/1297250