Я программирую на Java, но это скорее вопрос дизайна, поэтому любой программист OO мог бы ответить на этот вопрос. У меня есть вопрос относительно шаблона проектирования Стратегии. Вот несколько чернил, которые я нашел полезными:
Я использую шаблон стратегии дважды с одной группой из четырех стратегий и одной группой из трех. В каждом случае я решаю, какую стратегию использовать, поддерживая затухающий счетчик. если стратегия, которую программное обеспечение решит использовать, успешна, то счетчик увеличивается на единицу. Если используемая стратегия не выполняется, счетчик уменьшается на единицу. Независимо от успеха или неудачи. ВСЕ счетчики умножаются на число около 0,9, чтобы "разложить" счетчики с течением времени. Программное обеспечение будет выбирать, какую стратегию использовать на основе того, какая стратегия имеет самый высокий счетчик. Пример моего очень простого UML показан ниже:
.
И в форме ссылки (для удобства чтения): Пример UML
UML выше - макет, который я бы хотел использовать. Если вы не можете сказать из вышеупомянутого UML, я пишу игру Rock, Paper, Scissors с намерением избить всех своих друзей.
Теперь, к проблеме:
Я не могу решить, как реализовать "систему счетчиков" для принятия решения о том, какую стратегию использовать. Я думал о каком-то классе "данных", где все счетчики и строки истории могли быть сохранены, но это просто показалось мне неуклюжим. Во все времена я поддерживаю около 2 строк и около восьми счетчиков (возможно, может быть, меньше). Вот почему я думал о классе "данных", где все могло быть сохранено. Я мог бы просто создать экземпляр класса, который будет использоваться в методах selectStrategy() и selectMetaStrategy(), но я просто не знаю. Это мой первый проект, над которым я буду работать самостоятельно, и я просто ничего не могу решить. Я чувствую, что есть определенно лучшее решение, но я недостаточно осведомлен об этом.
Спасибо!
------------------------------------ последующие действия 1 ------- -------------------------------------
Большое вам спасибо за ответы и добрые слова. Однако у меня есть несколько вопросов. Я новичок в StackOverflow (и люблю его), поэтому, если это не правильное место для последующего вопроса, пожалуйста, дайте мне знать. Я редактирую свой оригинальный пост, потому что мое наблюдение немного длительное.
Я смотрел совет Пола Сонье об использовании сложного рисунка, и это выглядело очень интересно (спасибо Пол!). Для целей StrategyMatching и "интеллектуальных" стратегий AntiRotation я хочу реализовать цепочку всех игр противников, доступных для обоих классов. Кроме того, я хочу, чтобы строка истории редактировалась независимо от того, какую стратегию играла моя программа, чтобы я мог вести точную запись оппонента. Более полная строка (на самом деле я, вероятно, буду использовать LinkedList, но если кто-нибудь знает о лучшем методе/коллекции поиска (sub-String/sub-List), пожалуйста, дайте мне знать), тем лучше стратегия может предсказать поведение противника.
Мне было интересно, как я мог бы реализовать эту "строку" или коллекцию, все еще используя составной шаблон.
Кроме того, TheCapn поднял, что было бы неплохо хранить разные счетчики и коллекции истории для каждого противника. Любая мысль о том, как реализовать это с помощью составного шаблона?