具有通用方法和数据结构的策略
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
=]
我清楚地看到这个解决方案不是很干净,如果我能从更有经验的程序员那里得到建议,我将不胜感激。
既然没人回答,那我试试看。
我建议将策略与数据结构分开。每当您调用某个特定 Strategy
的 run()
时,您将向它传递一个 DataStruct
对象(作为参考)来处理和更新它。当然,这将扩展到您的 classes 层次结构。这样引用将一直传递到基数 class,然后最终 post 由起始函数处理。
这将避免关于数据结构中字段含义的任何歧义,因为当您将它传递给函数时,您必须确定您的意思。
我正在使用 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
=]
我清楚地看到这个解决方案不是很干净,如果我能从更有经验的程序员那里得到建议,我将不胜感激。
既然没人回答,那我试试看。
我建议将策略与数据结构分开。每当您调用某个特定 Strategy
的 run()
时,您将向它传递一个 DataStruct
对象(作为参考)来处理和更新它。当然,这将扩展到您的 classes 层次结构。这样引用将一直传递到基数 class,然后最终 post 由起始函数处理。
这将避免关于数据结构中字段含义的任何歧义,因为当您将它传递给函数时,您必须确定您的意思。