Создание класса колоды, расширяющего стек

Прежде всего позвольте мне сказать, что это не столько вопрос о том, как заставить его работать, а скорее вопрос о том, является ли это хорошей практикой или нет.

Я хочу реализовать колоду карт (как видно во многих играх, например, в играх TCG) с помощью специального метода shuffle()... Пока он использует стандартный метод библиотеки, но это может измениться в будущем.

Код:

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;

Просто интересно, если это хорошая практика, жажду услышать ответы.

2 ответа

Решение

Нет, это не очень хорошая практика. Ваш Deck класс должен содержать Stackне должно быть Stack,

Я не уверен, что ты хочешь Stack тем не мение. Скорее всего, вы хотите ArrayList<Card> или что-то вроде этого.

Я бы лучше использовал делегирование вместо наследования здесь. Расширение стека делает вас застрявшим в нем навсегда, а делегирование позволит вам легко заменить стек другим.

Кроме того, обычно не рекомендуется расширять коллекции. Java 8 представит коллекциям много нового, что может нарушить вашу реализацию или вашу логику.

Другие вопросы по тегам