Programuję w języku Java, ale jest to raczej pytanie projektowe, więc każdy programista OO mógłby prawdopodobnie odpowiedzieć na to pytanie. Mam pytanie dotyczące wzoru projektu strategii. Oto kilka atramentów, które okazały się przydatne:Strategiczny wzór - wybór strategii z licznikami
Używam wzorca strategii dwa razy z jedną grupą czterech strategii i jedną grupą trzech. W każdym przypadku decyduję, którą strategię zastosować, utrzymując rozpadający się licznik. jeśli strategia, którą oprogramowanie zdecyduje się zastosować, licznik zostanie zwiększony o jeden. Jeśli zastosowana strategia nie powiedzie się, licznik zostanie zmniejszony o jeden. Bez względu na sukces lub porażkę WSZYSTKIE liczniki są mnożone przez liczbę około .9, aby "z czasem" zepsuć liczniki. Oprogramowanie wybierze, którą strategię zastosować, w oparciu o którą strategię ma najwyższy licznik. Przykład mojego bardzo prostego UML pokazano poniżej:
.
A w postaci Link (dla łatwiejszego odczytu): Example UML
UML powyżej jest makieta chciałbym użyć. Jeśli nie możesz powiedzieć z powyższego UML, piszę grę Rock, Paper, Scissors z zamiarem pokonania wszystkich moich znajomych.
teraz do problemu:
nie mogę się zdecydować, jak wdrażać „system licznik” w celu podjęcia decyzji, która strategia w użyciu. Myślałem o jakiejś klasie "danych", w której można przechowywać wszystkie liczniki i ciągi historii, ale wydawało mi się to po prostu niezrozumiałe. Przez cały czas utrzymuję około 2 struny i około ośmiu liczników (może więcej, może mniej). Dlatego właśnie myślałem o klasie "danych", w której wszystko może być przechowywane. Mogę tylko utworzyć instancję klasy do użycia w metodach ChooseStrategy() i chooseMetaStrategy(), ale po prostu nie wiem. To mój pierwszy projekt, nad którym będę pracował sam i po prostu nie mogę nic zdecydować. Czuję, że jest zdecydowanie lepsze rozwiązanie, ale nie mam wystarczająco dużo doświadczenia, aby wiedzieć.
Dzięki!
------------------------------------ kontynuacja 1 ------ --------------------------------------
Dziękuję bardzo za odpowiedzi wszystkich i miłe słowa. Mam jednak kilka pytań uzupełniających. Jestem nowy w StackOverflow (i kocham to), więc jeśli to nie jest właściwe miejsce na pytanie uzupełniające, proszę dać mi znać. Edytuję mój oryginalny wpis, ponieważ moja obserwacja jest trochę długa.
Patrzyłem na radę Paula Soniera na temat stosowania wzoru kompozytowego i wyglądało to bardzo interesująco (dzięki Paul!). Na potrzeby strategii HistoryMatching i "intelligent" AntiRotation chcę zaimplementować ciąg wszystkich gier przeciwników dostępnych dla obu klas. Ponadto, chcę, aby ciąg historii był edytowany bez względu na strategię, którą grał mój program, dzięki czemu mogę zachować dokładny zapis dramatów przeciwnika. Bardziej obszerny ciąg (właściwie prawdopodobnie użyję LinkedList, ale jeśli ktoś zna lepszą (pod-String/sub-List) metodę/kolekcję wyszukiwania proszę daj mi znać) im lepsza strategia może przewidzieć zachowanie przeciwnika.
Zastanawiam się, w jaki sposób mogę zaimplementować ten "ciąg" lub kolekcję, nadal używając złożonego wzoru.
Ponadto, TheCapn wychował, że byłoby dobrym pomysłem przechowywanie różnych liczników i kolekcji historii dla każdego przeciwnika. Dowolna myśl o tym, jak wprowadzić to w złożony wzór?
biorąc pod uwagę swój pierwszy projekt, naprawdę doceń swój kierunek myślenia i zrozumiesz znaczenie dobrego projektu. –