Как использовать внешние классы в шаблон стратегии?
Я реализовал шаблон стратегии для парсера файла истории покера (код 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 ответ
Вы сами ответили на вопрос "А для этой стратегии понадобятся специфические атрибуты для игры и рук". Вы пишете стратегию, и атрибуты будут частью этой стратегии.