战略设计模式与实施行为之间的差异

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

我研究了策略设计模式,从我看到的结果中,有一种非常相似的方法来实现对象的“行为”。

一种方法是策略设计模式。通过这种方式,代表行为的对象“具有”策略。

另一种方法是使该对象“实现”行为(接口)。

例如,在游戏中,我有一个“敌人”物体,一个敌人在飞行,一个在驾驶。所以直到现在,我都会考虑:第一个“敌人”对象实现Flyable,第二个“敌人”对象实现Drivable。但是另一个解决方案可以是第一个敌人“ has-a” FlightingStrategy和第二个“ has-a” DrivingStrategy。

我正在尝试从好的设计方面寻找更好的解决方案。

谢谢。

java oop design-patterns coding-style
1个回答
0
投票

它们不可互换。一个很好的例子是JDK中的ComparableComparator

在您的情况下,Comparable表示接口设计。 Comparator是策略模式的示例。使用Collections.sort的两个签名,您可以执行此操作

Collections.sort(listOfComparables);

或此

Collections.sort(anyList, comparator);

假设您有一个Car列表。您可能要按颜色,座位数和马力对列表进行排序。在这种情况下,实现Comparable没有任何意义。汽车没有自然顺序;通过实现接口优先于一个排序优先于另一个排序是没有意义的。在这种情况下,所有顺序均相等。如果您将汽车声明为Comparable,那么对于您的班级用户来说可能不是很直观。他们可能必须检查实施或文档,才能确定所需的顺序。您应该使用Comparator对它们进行排序。

现在想象您有Coin个列表。硬币具有相当明显的自然顺序:其面值。您可以按大小或重量对硬币进行分类,但它们存在的主要原因是代表不同的面额。在这种情况下,并非所有顺序都相同。在这里实现Comparable很有意义,如果需要其他顺序,则可以使用Comparator

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