Я пытаюсь перевести покерную игру в правильную модель ООП.
Основы:Как избежать «заполнения» класса с атрибутами?
class Hand
{
Card cards[];
}
class Game
{
Hand hands[];
}
Я получаю игры и руки из текстового файла. Я анализирую в текстовый файл несколько раз, по нескольким причинам:
- прибудете Somes INFOS (причина 1)
- вычислить некоторые статистические данные (причина 2)
- ...
По причине 1 Мне нужны некоторые атрибуты (a1, b1) в классе Hand. По причине 2 мне нужны некоторые другие атрибуты (a2, b2). Я думаю, что грязный способ будет:
class Hand
{
Card cards[];
Int a1,b1;
Int a2,b2;
}
Я имею в виду, что бы некоторые атрибуты бесполезны большую часть времени. Таким образом, чтобы быть чище, мы могли бы сделать:
class Hand
{
Card cards[];
}
class HandForReason1 extends Hand
{
Int a1,b1;
}
Но я чувствую, что с помощью молотка ...
Мой вопрос: есть ли промежуточный путь? Или молотковое решение хорошее? (в этом случае, что было бы правильной семантикой?)
PS: шаблоны дизайна приветствуются :-)
PS2: шаблон стратегии - это молот, не так ли?
* EDIT * Вот это приложение:
// Parse the file, read game infos (reason 1)
// Hand.a2 is not needed here !
class Parser_Infos
{
Game game;
function Parse()
{
game.hands[0].a1 = ...
}
}
// Later, parse the file and get some statistics (reason 2)
// Hand.a1 is not needed here !
class Parser_Stats
{
Game game;
function Parse()
{
game.hand[0].a2 = ...
}
}
Рука, форматирующая ваше сообщение с помощью html, будет работать более или менее, вам будет проще и быстрее использовать механизм уценки, предоставляемый Stack Overflow. [Редактирование страницы справки] (http://stackoverflow.com/editing-help). – dmckee 2010-12-01 16:09:08
Я думаю, нам будет намного легче понять вашу проблему, если вы используете пример реальной жизни для ваших «атрибутов». Что означают значения a1 и b1, a2 и b2? – Fortega 2010-12-01 16:29:04