2013-03-28 138 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會向集合中引入許多新的東西,這可能會影響實現或邏輯。