2013-03-28 143 views
0

首先让我说,这不是一个如何让它起作用的问题,它更像是一个问题,这是否是好的做法。创建一个Deck类扩展堆栈

我想用一个自定义的shuffle()方法来实现一副牌(如许多游戏中所见,例如TCG游戏)......现在它使用标准库方法,但这可能会改变在将来。

代码:

package model; 

import java.util.Collections; 
import java.util.Stack; 

/** 
* 
* @author Frank 
*/ 
public class Deck<T> extends Stack<T> { 
    public void shuffle() { 
     Collections.shuffle(this); 
    } 
} 

当前的代码,我使用它:

private Deck<Card> deck; 

只是想知道,如果这是很好的做法,渴望听到的答案。

+0

我不喜欢在'Stack'中构建的java,因为它只是'Vector'顶部的扩展... – Lucas

+0

考虑'Deque'而不是'Stack'。 – Qwerky

回答

3

不,这不是好习惯。您的Deck类应包含 a Stack,它不应该 a Stack

反正我不确定你想要Stack。它更可能是你想ArrayList<Card>或类似的东西。

+0

+1支持组合继承 – Qwerky

+0

我同意,恐怕我忽略了它。不过,我认为堆栈确实更好,因为你推动和弹出,这是不可能的ArrayList – skiwi

+0

应该允许从卡组的任一端或甚至中间处理一个体面的卡片锐利 - 因此'ArrayList': )如果你担心性能,你可以试试'LinkedList'。你真正需要说明的是它**包含**卡片的'列表'。 – OldCurmudgeon

0

我最好在这里使用委托而不是继承。扩展堆栈会让你永远坚持下去,而代表团会让你轻松地用其他东西替换堆栈。

此外,扩展集合通常不是最佳实践。 Java 8会向集合中引入许多新的东西,这可能会影响实现或逻辑。