Genişlemeyen kompozisyon kullanın (evet, java'daki extends anahtar kelimesine yapılan bir başvuruda olduğu gibi, extends demekti ve evet bu kalıtımdır). Kompozisyon daha üst düzeydir, çünkü uygulamanızı tamamen korur ve sınıfınızın kullanıcılarını etkilemeden uygulamayı değiştirmenize izin verir.
Böyle bir şey denemenizi öneririz (doğrudan bu pencereye yazıyorum, bu yüzden alıcı sözdizimi hatalarına dikkat edin):
public LimitedSizeQueue implements Queue
{
private int maxSize;
private LinkedList storageArea;
public LimitedSizeQueue(final int maxSize)
{
this.maxSize = maxSize;
storageArea = new LinkedList();
}
public boolean offer(ElementType element)
{
if (storageArea.size() < maxSize)
{
storageArea.addFirst(element);
}
else
{
... remove last element;
storageArea.addFirst(element);
}
}
... the rest of this class
Daha iyi bir seçenek (Asaf'ın cevabına göre) Apache Collections CircularFifoBuffer'ı genel bir sınıfla sarmak olabilir . Örneğin:
public LimitedSizeQueue<ElementType> implements Queue<ElementType>
{
private int maxSize;
private CircularFifoBuffer storageArea;
public LimitedSizeQueue(final int maxSize)
{
if (maxSize > 0)
{
this.maxSize = maxSize;
storateArea = new CircularFifoBuffer(maxSize);
}
else
{
throw new IllegalArgumentException("blah blah blah");
}
}
... implement the Queue interface using the CircularFifoBuffer class
}