本文提供命令模式的Python语言示例。首先是Receiver类:

 

Aha!设计模式(79)-命令模式(4)_嵌套

 

这个类只是命令实例的操作对象,并不是命令模式必需的部分。它的功能很简单:进行简单的加法运算之后将结果按照prefix指定的缩进输出。

 

Aha!设计模式(79)-命令模式(4)_python语言_02

 

在Python语言中Command基类并不是必须的,但是为了保持和其他语言的一致性,还是予以保留。如果有必要可以实现共通功能。

 

Aha!设计模式(79)-命令模式(4)_python语言_03

 

具象命令类用于定义execute的实际动作。上面的例子中,execute方法调用了receiver的action方法。在实际的开发中可以定义多个具象类,每个具象类可以针对不同(类型或实例)的receiver调用不同的方法。

 

Aha!设计模式(79)-命令模式(4)_设计模式_04

 

MacroCommand类实现了简单的命令组合功能。在它的execute中,每个事先添加的子命令都可以被按照一定顺序调用。在实际的开发中,甚至可能出现多层嵌套的情况。

 

Aha!设计模式(79)-命令模式(4)_命令模式_05

 

Invoker是实际的动作调用者。它会根据需要执行Command的动作,而并不会关心Command的实际内容。

 

接下来是用命令模式的的例子。

 

Aha!设计模式(79)-命令模式(4)_嵌套_06

 

在生成命令的部分,构建了两个命令。一个是+10动作的简单命令,另一个是包含+1,+2,+3,+4动作的复合命令。两个命令作为参数分别传递给invoker以后被执行。其结果如下:

 

Aha!设计模式(79)-命令模式(4)_嵌套_07

 

通过输出的嵌套结构,可以更加容易地理解两个Command的执行情况。

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

Aha!设计模式(79)-命令模式(4)_python语言_08