2016-04-07 52 views
2

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

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

让我给你举一个简单的例子:假设StrategyA做一些优化过设置成一段StrategyAUnionB确实优化了集合A联盟B. DataStruct.optimalValue确实有两个意义,但意义是不一样的。

最简单的解决方案,我现在看到的是在基类中把DataStruct类型的属性dataStruct,如果一个策略将调用它需要做出的dataStruct副本,它会使用更新dataStruct父类的run()在对父类的run()的调用之后。

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

回答

0

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

我会建议从数据结构中分离策略。无论何时调用某个特定的Strategyrun(),您都会传递一个DataStruct对象(作为参考)来处理和更新它。当然,这将延伸到您的类的层次结构。这样引用将被传递到基类,然后最后由启动函数进行后处理。

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

+0

我不认为这个解决方案的工作原理是因为每个人都会修改相同的DataStruct对象......但是在Strategy和Datastruct之间有一个分离可能是一个好主意。 –