有界优先队列:继承 vs 组合

5
我想编写一个有界优先队列类。这实际上是一个优先队列,但是对于队列中可以存在的元素数量有一个限制。因此,如果我插入一个新元素并且队列已满,则会查看该元素是否大于队列顶部。如果是,则丢弃新元素。如果不是,则删除顶部元素并插入此新元素(队列将自动重新组织)。我目前已经从PriorityQueue派生出了BoundedPriorityQueue,并具有“maxCount”成员,我已经重写了add方法并添加了上述功能。我在思考是否应该考虑使用组合方式而不是继承方式来完成它。尽管我的当前方法似乎很简单。
如果我选择使用组合,则必须从AbstractQueue类派生,实现方法,然后将优先队列与其组合。
谢谢,
Venk

2
你不喜欢目前的解决方案吗?是过于复杂吗?难以理解吗?还是太慢或容易出现竞态条件问题? - Lee Meador
好的,没有其中任何一个。但是在《Effective Java》一书中,Joshua遇到了一个略微不同但相关的问题,但他使用组合解决了它。我正在尝试探索背后的原因。 - Venk K
1
如果您使用继承,您必须问自己是否可以在不遇到任何问题的情况下用BoundedPriorityQueue替换Priority Queue。如果可以,请使用继承,否则请使用组合。如果有疑问,请使用组合。 - helpermethod
2个回答

1

0
我会在这种情况下选择继承 - 这是一个典型的例子。您可以(像我一样,当我无法决定使用哪个实现时)创建两个解决方案,尝试它们,看看它们在API方面、性能、实现和理解方面如何,并根据此进行决定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接