策略设计模式与实施行为之间的区别

时间:2020-02-25 09:32:33

标签: java oop design-patterns coding-style

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

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

Collections.sort(listOfComparables);

或这个

Collections.sort(anyList, comparator);

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

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

从更广泛的意义上讲,当没有一种“首选”方法时,通常最好地应用策略模式。一个类只能实现一次接口,但是它可以使用许多不同的策略。这是一种inversion of control