战略设计模式与实施行为之间的差异
问题描述
我研究了策略设计模式,从我看到的结果中,有一种非常相似的方法来实现对象的“行为”。
一种方法是策略设计模式。通过这种方式,代表行为的对象“具有”策略。
另一种方法是使该对象“实现”行为(接口)。
例如,在游戏中,我有一个“敌人”物体,一个敌人在飞行,一个在驾驶。所以直到现在,我都会考虑:第一个“敌人”对象实现Flyable,第二个“敌人”对象实现Drivable。但是另一个解决方案可以是第一个敌人“ has-a” FlightingStrategy和第二个“ has-a” DrivingStrategy。
我正在尝试从好的设计方面寻找更好的解决方案。
谢谢。
思路:
它们不可互换。一个很好的例子是JDK中的Comparable
与Comparator
。
在您的情况下,Comparable
表示接口设计。 Comparator
是策略模式的示例。使用Collections.sort
的两个签名,您可以执行此操作
Collections.sort(listOfComparables);
或此
Collections.sort(anyList, comparator);
假设您有一个Car
列表。您可能要按颜色,座位数和马力对列表进行排序。在这种情况下,实现Comparable
没有任何意义。汽车没有自然顺序;通过实现接口优先于一个排序优先于另一个排序是没有意义的。在这种情况下,所有顺序均相等。如果您将汽车声明为Comparable
,那么对于您的班级用户来说可能不是很直观。他们可能必须检查实施或文档,才能确定所需的顺序。您应该使用Comparator
对它们进行排序。
现在想象您有Coin
个列表。硬币具有相当明显的自然顺序:其面值。您可以按大小或重量对硬币进行分类,但它们存在的主要原因是代表不同的面额。在这种情况下,并非所有顺序都相同。在这里实现Comparable
很有意义,如果需要其他顺序,则可以使用Comparator
。