Verbesserte LogicFactory

Ihr habt ein Programm oder -teil entwickelt, von dem ihr glaubt, dass er anderen Teilnehmern nützlich sein könnte, und ihr wollt diesen teilen? Dann könnt ihr eure Entwicklung hier vorstellen.
Forumsregeln
Bitte veröffentlicht nur komplette Programmteile (z.B. eine vollständige Funktion, ein neuer Client etc.), die tatsächlich auch so von anderen genutzt werden können. Für Fragen und Hilfe bei der Entwicklung ist in den anderen Foren Platz.
Außerdem sollen hier bitte keine kompletten Strategien veröffentlicht werden.
TheDroide
Beiträge: 1
Registriert: Do 23. Nov 2017, 21:08

Verbesserte LogicFactory

Beitragvon TheDroide » Do 23. Nov 2017, 21:18

Anstatt in der LogicFactory Reflection zu verwenden, kann man per Java 8 Method References typsicheren und performanteren Code schreiben, der zusätzlich noch eleganter ist (Man könnte das LogicBuilder-Interface natürlich auch durch Function<AbstractClient, IGameHandler> ersetzen, was jedoch wiederum der Lesbarkeit schaden würde ;) ):

Code: Alles auswählen

@FunctionalInterface
public interface LogicBuilder {
   public IGameHandler build(AbstractClient client);
}


Code: Alles auswählen

public enum LogicFactory {
   RANDOM(RandomLogic::new), // Die SimpleClient-Logik
   DEFAULT(RandomLogic::new); // Die Standard-Strategie

   private static final Logger LOGGER = LoggerFactory.getLogger(LogicFactory.class);
   private final LogicBuilder builder;

   private LogicFactory(LogicBuilder builder) {
      this.builder = builder;
   }

   /**
    * Erstellt eine Logik-Instanz und gibt diese zurueck
    *
    * @param client
    *            Der aktuelle Client
    * @return Eine Instanz der gewaehlten Logik
    * @throws Exception
    *             Wenn etwas schief gelaufen ist und keine Instanz erstellt
    *             werden konnte, wird eine Exception geworfen!
    */
   public IGameHandler createInstance(AbstractClient client) throws Exception {
      LOGGER.debug("Erzeuge Instanz von: {}", name());
      return builder.build(client);
   }
}

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Re: Verbesserte LogicFactory

Beitragvon SvenK » Di 5. Dez 2017, 14:49

Danke fuer den Hinweis!

Ich habe ein entsprechendes Issue angelegt: https://github.com/CAU-Kiel-Tech-Inf/socha/issues/115