具有通用方法和数据结构的策略

Strategies with common methods and data structure

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

现在所有这些策略都应用于同一个 DataStruct。实际上,每个策略都明确定义了独特的 DataStruct。然而,在每个策略中,DataStruct 的含义可能不同。

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

我现在看到的简单解决方案是将 DataStruct 类型的属性 dataStruct 放在基础 class 中,如果策略将调用 run() parent class 它需要制作 dataStruct 的副本,它将在调用 parent class.[=27 的 run() 后用于更新 dataStruct =]

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

既然没人回答,那我试试看。

我建议将策略与数据结构分开。每当您调用某个特定 Strategyrun() 时,您将向它传递一个 DataStruct 对象(作为参考)来处理和更新它。当然,这将扩展到您的 classes 层次结构。这样引用将一直传递到基数 class,然后最终 post 由起始函数处理。

这将避免关于数据结构中字段含义的任何歧义,因为当您将它传递给函数时,您必须确定您的意思。