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

Strategies with common methods and data structure

本文关键字:数据结构 策略 方法      更新时间:2023-10-16

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

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

让我给你一个简单的例子:想象一下StrategyA对集合 A 进行一些优化,而StrategyAUnionB对集合 A 联合 B 进行优化。 DataStruct.optimalValue确实对两者都有含义,但含义并不相同。

我现在看到的简单解决方案是在基类中放置一个 DataStruct 类型的属性dataStruct,如果策略将调用父类的run(),则需要创建dataStruct的副本,它将用于在调用父类run()后更新dataStruct

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

既然没人回答,我就试一试。

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

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