具有共同方法和数据结构的战略

时间:2016-04-07 08:16:41

标签: c++ inheritance polymorphism strategy-pattern

我正在使用C ++。我有不同的类,基本上是做同样事情的策略。我们有基类Strategy,从中继承更高级的策略。 Strategy的每个直接或间接子类都有一个方法run()。高级策略通常会在其方法run()内调用其父级的方法run(),然后将添加一些预处理或后处理。它也可能在循环内多次调用它。

现在所有这些策略都应用于同一DataStruct。事实上,每种策略都有明确的唯一DataStruct。但是,在每个策略中,DataStruct的含义可能不同。

让我举一个简单的例子:想象StrategyA对集合A进行一些优化,而StrategyAUnionB对集合A联盟B进行优化。DataStruct.optimalValue确实对两者都有意义但意思不一样。

我现在看到的简单解决方案是在基类中放置类型为dataStruct的属性DataStruct,如果策略将调用父类的run(),则需要进行在调用父类dataStruct之后用于更新dataStruct的{​​{1}}副本。

我清楚地看到这个解决方案不是很干净,如果我能从更有经验的程序员那里得到建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于没有人回答,我会试一试。

我建议将策略与数据结构分开。每当您调用某个特定run()的{​​{1}}时,您都会传递一个Strategy对象(作为参考)来处理和更新它。当然,这将扩展到您的类层次结构。这样引用将被传递到基类,然后最终由启动函数进行后处理。

这样可以避免对数据结构中字段含义的任何含糊不清,因为在将它传递给函数时必须确定你的意思。