在大多数示例中,策略模式通常适用于压缩算法/编解码算法,其中这些算法可能具有完全不同的代码。
但是,在我的情况下,我想重构策略模式的统计算法,有50%的代码相似或完全相同。我想知道人们如何应对这个问题?如果我使用策略模式,可能会有50%的代码被复制,这是不可取的。如果不是重构,则代码最终会有许多if-else全部用于处理不同类型的统计算法。如何评估权衡?什么是其他可能的解决方案?
答案 0 :(得分:4)
最终目标不是减少尽可能多的代码重复。 目标是使代码可维护。您需要问自己,减少这种重复是否会使策略实施更容易或更难维护。
如果减少重复会使代码难以维护,那么请保留重复,但可能找到另一种方法来缓解问题(文档和测试是两种可能的方法)。
如果减少重复会使代码更易于维护,那么请考虑删除重复的可能方法(委托,如使用策略和装饰器;继承,如使用模板方法等)。
答案 1 :(得分:3)
如果更容易,你可以使用Template Method,但是很有可能,继承,你可以从包含大多数公共代码的公共基类派生你的具体策略。