Как использовать внешние классы в шаблон стратегии? - PullRequest
1 голос
/ 06 декабря 2010

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

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

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

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 Ответ

1 голос
/ 06 декабря 2010

Вы сами ответили на вопрос: «И эта стратегия потребует определенных атрибутов для игры и рук».Вы пишете стратегию, и атрибуты будут частью этой стратегии.

...