Шаблон разработки стратегии - выбор между стратегиями со счетчиками

Я программирую на Java, но это больше вопрос дизайна, поэтому любой объектно-ориентированный программист, вероятно, сможет ответить на этот вопрос. У меня вопрос по шаблону разработки стратегии. Вот несколько чернил, которые я нашел полезными:

  1. Разъяснение паттерна стратегии - OO Design .

Я использую паттерн стратегии дважды с одной группой из четырех стратегий и одной группой из трех. В каждом случае я решаю, какую стратегию использовать, поддерживая убывающий счетчик. если стратегия, которую решает использовать программное обеспечение, успешна, счетчик увеличивается на единицу. Если использованная стратегия не удалась, счетчик уменьшается на единицу. Независимо от успеха или неудачи, ВСЕ счетчики умножаются на число около 0,9 для «разложения» счетчиков со временем. Программа выберет, какую стратегию использовать, в зависимости от того, какая стратегия имеет наибольший счетчик. Пример моего очень простого UML показан ниже:

Example UML.

И в форме ссылки (для облегчения чтения): Пример UML

UML выше - это макет, который я хотел бы использовать. Если вы не можете сказать из приведенного выше UML, я пишу игру «Камень, ножницы, бумага» с намерением обыграть всех своих друзей.

Теперь перейдем к проблеме:

Я не могу решить, как реализовать «систему счетчиков» для решения, какую стратегию использовать. Я думал о каком-то классе «данных», где можно было бы хранить все счетчики и строки истории, но мне это показалось неуклюжим. Я постоянно поддерживаю около двух струн и около восьми счетчиков (может, больше или меньше). Вот почему я думал о классе «данных», где можно было бы хранить все. Я мог бы просто создать экземпляр класса, который будет использоваться в методах chooseStrategy () и chooseMetaStrategy (), но я просто не знаю. Это мой первый проект, над которым я буду работать самостоятельно, и я просто не могу ни с чем определиться. Я чувствую, что определенно есть лучшее решение, но у меня недостаточно опыта, чтобы знать.

Спасибо!

------------------------------------ продолжение 1-- ------------------------------------------

Большое спасибо на все ответы и добрые слова. Однако у меня есть несколько дополнительных вопросов. Я новичок в StackOverflow (и мне это нравится), поэтому, если это не подходящее место для следующего вопроса, сообщите мне. Я редактирую свой исходный пост, потому что мои последующие действия немного длинны.

Я изучал совет Пола Сонье об использовании составного паттерна, и он выглядел очень интересным (спасибо, Пол!). Для целей HistoryMatching и «интеллектуальных» стратегий AntiRotation я хочу реализовать цепочку всех оппонентов, доступных для обоих классов. Кроме того, я хочу, чтобы строка истории редактировалась независимо от того, какую стратегию использовала моя программа, чтобы я мог вести точный учет игр оппонента. Чем полнее строка (на самом деле я, вероятно, буду использовать LinkedList, но если кто-нибудь знает о лучшем методе / коллекции поиска (подстрока / подсписок), дайте мне знать), тем лучше стратегия может предсказать поведение оппонента.

Мне было интересно, как я могу реализовать эту «строку» или коллекцию, все еще используя составной шаблон.

Кроме того, TheCapn сообщил, что было бы неплохо хранить разные счетчики и коллекции истории для каждого противника. Есть какие-нибудь мысли о том, как реализовать это с помощью составного шаблона?

11
задан Matthew Kemnetz 7 July 2011 в 22:54
поделиться