Pierwsza rzecz, która się rzuca w oczy to złe nazewnictwo, budowniczy to builder a nie factory, w fabryce byś miał po prostu różne metody tworzące od razu cały obiekt, builder jest bardziej szczegółowy.
Wydaje mi się, że gettery są zupełnie niepotrzebne, natomiast w setterach mógłbyś zrobić żeby zamiast void zwracały ten sam obiekt, wtedy możesz wygodniej tworzyć za pomocą buildera (zakładając, że stosujesz go w wielu miejscach), np. turniej = turniejBuilder.setX(...).setY(...).build(); choć oczywiście wadą tego jest trudniejsze debugowanie takich łańcuchów.
Zamiast korzystać z HashMap, lepiej użyć bardziej ogólnego interfejsu tj. Map, to jest taki ogólny best practice, żeby jak najbardziej korzystać z interfejsów, nigdy nie wiesz czy za jakiś czas nie okaże się, że wydajniejszy jest tutaj TreeMap.
Na UML się słabo znam, ale wydaje mi się, że agregacja zachodzi w drugą stronę, tzn. romb jest przy tym obiekcie który posiada kolekcję danych obiektów. Te strzałki między Turniej a TurniejFactory powinny raczej być inne niż te pomiędzy TurniejFactory a implementacjami, ponieważ jest to inny rodzaj relacji.