我正在使用C ++。我有不同的类,基本上是做同样事情的策略。我们有基类Strategy
,从中继承更高级的策略。 Strategy
的每个直接或间接子类都有一个方法run()
。高级策略通常会在其方法run()
内调用其父级的方法run()
,然后将添加一些预处理或后处理。它也可能在循环内多次调用它。
现在所有这些策略都应用于同一DataStruct
。事实上,每种策略都有明确的唯一DataStruct
。但是,在每个策略中,DataStruct
的含义可能不同。
让我举一个简单的例子:想象StrategyA
对集合A进行一些优化,而StrategyAUnionB
对集合A联盟B进行优化。DataStruct.optimalValue
确实对两者都有意义但意思不一样。
我现在看到的简单解决方案是在基类中放置类型为dataStruct
的属性DataStruct
,如果策略将调用父类的run()
,则需要进行在调用父类dataStruct
之后用于更新dataStruct
的{{1}}副本。
我清楚地看到这个解决方案不是很干净,如果我能从更有经验的程序员那里得到建议,我将不胜感激。
答案 0 :(得分:0)
由于没有人回答,我会试一试。
我建议将策略与数据结构分开。每当您调用某个特定run()
的{{1}}时,您都会传递一个Strategy
对象(作为参考)来处理和更新它。当然,这将扩展到您的类层次结构。这样引用将被传递到基类,然后最终由启动函数进行后处理。
这样可以避免对数据结构中字段含义的任何含糊不清,因为在将它传递给函数时必须确定你的意思。