我已经看过this explanation on Wikipedia,特别是C++示例,并且没有认识到仅仅定义3个类,创建实例并调用它们之间的区别,以及该示例。我所看到的仅仅是将两个其他课程放在这个过程中,并且看不到哪里会有好处。现在我确信我错过了一些明显的东西(树木) - 有人可以用一个明确的现实世界的例子来解释它吗?使用战略模式的好处在哪里?
我可以从这么远的答案做什么,在我看来是只是这样做的更加复杂的方式:
have an abstract class: MoveAlong with a virtual method: DoIt()
have class Car inherit from MoveAlong,
implementing DoIt() { ..start-car-and-drive..}
have class HorseCart inherit from MoveAlong,
implementing DoIt() { ..hit-horse..}
have class Bicycle inherit from MoveAlong,
implementing DoIt() { ..pedal..}
now I can call any function taking MoveAlong as parm
passing any of the three classes and call DoIt
Isn't this what Strategy intents? (just simpler?)
[编辑更新] 我指的是功能上面被替换为另一个类,其中MoveAlong将成为根据需要设置的属性,基于在这个新类中实现的算法。 (什么是证明接受的答案类似。)
[编辑更新] 结论
策略模式有它的用途,但我在吻一个强有力的信徒,会倾向于更直接,更不困惑的技术。大多数情况下,因为我想传递易于维护的代码(并且'我最有可能是必须进行更改的人员!)。
“是不是这是什么策略的意图?(只是更简单?)“< - - 除了你给你的类的引用,让其他类在需要的时候调用它,而另一个类只知道它有一个MoveAlong。这是在团队中更有用的其中一种。 – Gerald 2008-10-05 10:52:30
嗨杰拉尔德我认为你的例子是一个战略模式的坏榜样。是的,它是一种战略,但在你的情况下,有比实施战略模式更好的子类。我相当肯定火星时钟会有不同于地球时钟的行为,因此它值得继承时钟类。 – RWendi 2008-11-27 04:26:53
大声笑...我刚看到这个评论。我想,如果你期望在火星上有客户,那么在你的设计中可能值得担心火星钟。但是由于100%的大多数人的客户将成为地球上的人类,并且具有世界时间数据表示,所以我认为忽略这种边缘情况是相当安全的,除非是视频游戏。 – Gerald 2009-06-05 14:44:30