0

我正在使用策略设计模式实现 2 个不同的具体策略,第二个重用第一个的代码,同时对其进行扩展。我想知道这是否“破坏”了策略设计模式的优势,或者这是否有什么不同?有没有更好的方法来做到这一点,比如让一个抽象类实现策略接口,并让这两个策略从那个抽象类继承?

看待这个问题的另一种方式是:策略设计模式的优势是否源于这样一个事实,即可以添加和删除不同的策略而不影响任何其他策略?如果是这样,我应该将代码复制到更复杂的具体策略吗?


在我的特殊情况下,我正在实施两种不同的论文排序策略:

  1. 第一个根据它们与某些关键字的相似程度对所有文章进行排序。

  2. 第二种策略首先对所有作者进行排序,然后排序调用第一个具体策略根据每个作者的文章与关键字的相似程度对它们进行排序。

这是一个合适的设计吗?

4

1 回答 1

0

. 我想知道这是否“破坏”了策略设计模式的优势,或者这是否有什么不同?

复制代码是不好的;如果您必须在一个地方修复它,那么您很可能会忘记将修复复制到所有副本中。想想必须支持这个烂摊子的可怜的灵魂!

如果策略有通用代码,那么您可以

  • 将公共代码放入实用程序类并添加聚合/添加公共类作为两个实现的成员,

  • 将通用代码放入基类并在两个实现中继承该类

聚合通常比继承更受青睐。

于 2013-12-02T15:45:50.770 回答