策略模式与策略包含类似的代码

Sta*_*tan 2 java algorithm design-patterns strategy-pattern

在大多数示例中,策略模式通常适用于压缩算法/编解码器算法,这些算法可能具有完全不同的代码。

但是,就我而言,我想重构为策略模式的统计算法有 50% 的代码相似或完全相同。我想知道人们如何处理这个问题?如果我使用策略模式,可能会有 50% 的代码被复制,这是不希望的。如果不重构,代码最终会包含许多 if-else 集来处理不同类型的统计算法。如何评估权衡?其他可能的解决方案是什么?

Nam*_*ter 6

最终目标不是尽可能减少代码重复。目标是使代码可维护。您需要问自己,减少这种重复是否会使策略实施更容易或更难维护。

如果减少重复使代码更难维护,那么保留重复,但可能找到另一种方法来减轻担忧(文档和测试是两种可能的方法)。

如果减少重复会使代码更易于维护,那么请考虑消除重复的可能方法(委托,如策略和装饰器;继承,如模板方法等)。


nto*_*ohl 5

如果更容易,您可以使用模板方法,但也有很大的可能性,通过继承,您可以从包含大部分公共代码的公共基类派生具体策略。