Я программирую на Java, но это больше вопрос дизайна, поэтому любой программист на OO, вероятно, мог бы ответить на этот вопрос.У меня есть вопрос относительно шаблона проектирования стратегии.Вот несколько чернил, которые я нашел полезными:
Объясненный паттерн стратегии - ОО .
Я использую паттерн стратегии дважды с одной группой из четырех стратегий и одной группой из трех.В каждом случае я решаю, какую стратегию использовать, поддерживая счетчик с гниением.если стратегия, которую программное обеспечение решает использовать, успешна, то счетчик увеличивается на единицу.Если используемая стратегия не удалась, то счетчик уменьшается на единицу.Независимо от успеха или неудачи ВСЕ счетчики умножаются на число около 0,9, чтобы «затухать» счетчики с течением времени.Программное обеспечение будет выбирать, какую стратегию использовать, исходя из того, какая стратегия имеет самый высокий счетчик.Пример моего очень простого UML показан ниже:
.
И в виде ссылки (для удобства чтения): Пример UML
UML выше - это макет, который я хотел бы использовать.Если вы не можете сказать из вышеизложенного UML, я пишу игру «Камень, бумага, ножницы» с намерением обыграть всех моих друзей.
Теперь перейдем к проблеме:
Я не могу решить, как реализовать «систему счетчиков» для решения, какую стратегию использовать.Я думал о каком-то классе «данных», в котором можно хранить все счетчики и строки истории, но мне это показалось неуклюжим.Я всегда поддерживаю около 2 строк и около восьми счетчиков (может быть, больше, а может и меньше).Вот почему я думал о классе «данных», где можно хранить все.Я мог бы просто создать экземпляр класса, который будет использоваться в методах chooseStrategy () и chooseMetaStrategy (), но я просто не знаю.Это мой первый проект, над которым я буду работать самостоятельно, и я просто не могу ничего решить.Я чувствую, что есть определенно лучшее решение, но я не достаточно опытен, чтобы знать.
Спасибо!
------------------------------------продолжение 1 --------------------------------------------
Большое спасибо всем за ответы и добрые слова.У меня есть несколько последующих вопросов, хотя.Я новичок в StackOverflow (и мне это нравится), поэтому, если это не то место, где можно задать вопрос, пожалуйста, дайте мне знать.Я редактирую свое оригинальное сообщение, потому что мое продолжение немного длинно.
Я искал совет Пола Сонье об использовании составного шаблона, и он выглядел очень интересно (спасибо, Пол!).Для целей HistoryMatching и «интеллектуальных» стратегий AntiRotation я хочу реализовать цепочку всех игр противника, доступных для обоих классов.Кроме того, я хочу, чтобы строка истории редактировалась независимо от того, какую стратегию сыграла моя программа, чтобы я мог вести точный учет игр противника.Чем полнее строка (на самом деле я, вероятно, буду использовать LinkedList, но если кто-нибудь знает о лучшем (подстроке / подсписке) методе поиска / подбора, пожалуйста, дайте мне знать), тем лучше стратегия может предсказать поведение противника.
Мне было интересно, как можно реализовать эту «строку» или коллекцию, все еще используя составной шаблон.
Кроме того, TheCapn подчеркнул, что было бы неплохо хранить различные счетчики и историюколлекции для каждого противника.Любая мысль о том, как реализовать это с помощью составного шаблона?