Как использовать внешние классы в шаблон стратегии?

Я реализовал шаблон стратегии для парсера файла истории покера (код PHP или Java). У меня есть проблема, чтобы создать чистый способ ООП для классов и объектов, используемых несколькими стратегиями.

В реальной жизни:

У меня есть игра класса, в которой есть рука (и)

class Hand
{
    ... // attributes for all strategies 
    ... // (in fact : attributes that define the "core" of a Hand)
}
class Game
{
    Hand hands[];
}

Одна стратегия создаст объект Game and the Hands

class StrategyA implements IStrategy // strategy pattern    
{
    Game game;
    function Parse()
    {
        game = new Game();
        ...
    }
}

И этой стратегии потребуются определенные атрибуты для игры, и в каждой раздаче я не могу поместить эти атрибуты в руку или игру, хотя они используются только одной стратегией, а не другими. Мой вопрос: каков наилучший способ ООП? Создать конкретные классы для стратегии?

class HandForStrategyA extends Hand
{
    Int x; // useful only in the strategy A context
}
class StrategyA
{
    Game game;
    HandForStrategyA hands[];
}

Кажется очевидным ответом, но мне все еще интересно, есть ли лучшие способы. Кроме того, у меня есть проблема с семантикой: какое имя я должен дать своим классам (HandFor... чувствует себя плохо!). Я программист старой школы, очень процедурный, и я теряю так много времени, чтобы думать о "чистом" ООП!

1 ответ

Вы сами ответили на вопрос "А для этой стратегии понадобятся специфические атрибуты для игры и рук". Вы пишете стратегию, и атрибуты будут частью этой стратегии.

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