5

我想写一个有界优先队列类。这本质上是一个优先级队列,但对队列中可以存在的元素数量有限制。因此,如果我插入一个新元素并且队列已满,那么我会查看该元素是否大于队列的顶部。如果是,那么我丢弃新元素。如果不是,那么我删除顶部元素并插入这个新元素(队列会自动重新组织)。我目前已经实现了 BoundedPriorityQueue 作为派生自具有“maxCount”成员的 PriorityQueue 并且我已经覆盖了 add 方法并添加了我上面描述的功能。我想知道我是否应该考虑以组合方式而不是继承方式来做。不过,我目前的方法似乎很简单。

如果我要进行组合,那么我必须从 AbstractQueue 类派生,实现方法,然后用它组合优先级队列。

谢谢,

文克

4

2 回答 2

1

在我看来,最好使用组合。因为,这种继承方式违反了里氏替换原则。派生类型不应取代基类型的功能。此链接将很有用:更喜欢组合而不是继承

于 2014-08-22T10:00:53.780 回答
0

在所描述的情况下,我会选择继承——这是一个典型的例子。您可以(就像我无法在多个实现之间做出决定时所做的那样)创建两个解决方案,试用它们,看看它们在 API 方面、性能、实现和理解方面的表现如何,并据此做出决定。

于 2013-10-16T18:03:37.903 回答