这是命令模式还是策略模式?

问题描述 投票:0回答:1

这是我正在做的旧考试中的图像。通过 UML 图,如上所示,我如何确定这是命令模式还是策略模式?

问题的答案是命令模式和复合模式。显然,它是复合的,因为Block有多个Statement的聚合。我知道这是命令模式,因为它们在接口中使用execute(),然后在几个子类中实现,尽管从技术上讲这不能也被视为策略模式吗?

我不太理解两者在具体代码中的区别,因为我倾向于将其视为相同的代码,只是以不同的方式使用,因此 UML 图可以是任一模式。但在这种情况下,回答“策略”的得分会比回答“命令模式”的得分少。

design-patterns uml strategy-pattern command-pattern
1个回答
0
投票

这实际上是 解释器模式的变体,其中

interpret()
操作被称为
execute()
并且上下文要么不需要,要么以不同的方式管理。

自关联在实现级别用于那些不是终端叶子的

Statement
,即可以由其他几个
Statement
组成。

该模式由其目标来标识,即表示允许解释/执行语句的语言语法(此处为语句、块语句、打印语句)。

正如GoF中所解释的,解释器模式是复合模式的特化(因为它的结构可以被统一处理)。所以答案组合是正确的,但这只是图片的一部分。

你可以争论命令模式,并且它是可以辩护的。事实上,GoF 提到了宏命令的可能性,它是几个简单命令的聚合。然而,它并没有将其显示为该模式的基本特征。此外,命令模式的一个关键特征是将构造与调用分开,这里根本不提及这些元素。选择命令不会是错误的,但是比起解释器更喜欢它会错过这个构造对于您的特定和明确的示例的真正目的。

P.S:正如 qwerty_so 在评论中所解释的,白色菱形在现代 UML 中不再有用,因为它的语义没有在 UML 规范中定义,因此与简单关联相比,它不会添加任何内容(请参阅此问题了解所有详细信息)。

© www.soinside.com 2019 - 2024. All rights reserved.