我使用Java编程,但这是一个更多的设计问题,所以任何OO程序员都可能回答这个问题。我有一个关于战略设计模式的问题。这里有几个油墨我发现有用:策略设计模式 - 在计数器策略之间进行选择
- Strategy Pattern Explained-OO Design。
我正在使用战略模式两次,一组四个策略和一组三个。在每种情况下,我都通过维护一个衰减计数器来决定使用哪种策略。如果软件决定使用的策略成功,则计数器增加1。如果使用的策略不成功,则计数器减1。无论成功或失败,所有计数器都会乘以一个大约.9的数字,以随着时间的推移“衰减”计数器。软件将根据哪种策略具有最高计数器来选择使用哪种策略。我非常简单的UML的一个例子如下所示:
。
而且在链接的形式(为便于阅读): Example UML
上面的UML是我想用的样机。如果你不能从上面的UML中得知,我正在写一个Rock,Paper,Scissors游戏,目的是要打败我所有的朋友。
现在,这个问题:
我不能决定如何实施“反制”确定使用哪种策略。我正在考虑一些可以存储所有计数器和历史字符串的“数据”类,但对我来说这似乎很笨拙。在任何时候,我都保持着大约2个弦乐器和大约8个计数器(可能更多也许更少)。这就是为什么我在考虑可以存储所有内容的“数据”类。我可以实例化要在chooseStrategy()中使用的类并选择MetaStrategy()方法,但我只是不知道。这是我第一个为自己工作的项目,我无法决定任何事情。我觉得肯定有更好的解决方案,但我没有足够的经验知道。
谢谢!
------------------------------------后续1 -------- --------------------------------------
非常感谢大家的回答和善的话。不过,我确实有一些跟进问题。我是StackOverflow的新手(并且很喜欢它),所以如果这不是跟进问题的正确位置,请告诉我。我正在编辑我的原始文章,因为我的后续工作有点冗长。
我正在研究Paul Sonier关于使用复合模式的建议,它看起来很有趣(感谢Paul!)。为了HistoryMatching和“智能”AntiRotation策略的目的,我希望实现一系列对两个类都可访问的对手游戏。另外,无论我的程序播放什么策略,我都希望编辑历史字符串,以便我能够保持对对手戏剧的准确记录。字符串越全面(实际上我可能会使用LinkedList,但如果有人知道更好的(子字符串/子列表)搜索方法/集合,请让我知道),策略可以更好地预测对手的行为。
我想知道如何实现这个“字符串”或集合,同时仍然使用复合模式。另外,TheCapn提出,为每个对手存储不同的计数器和历史集合是一个不错的主意。任何关于如何用复合模式实现这个想法?
考虑到你的第一个项目,真的很感谢你的思维方向,并且你明白一个好设计的重要性 –