Ok, ich habe einen Spieleserver in Java/Hibernate/Spring/Quartz. Die Spieluhr tickt mit einem Quarz-Timer, und das funktioniert gut.Benötigen Sie eine elegante Möglichkeit, willkürlichen Code in einem bestimmten Intervall aufzurufen
Allerdings habe ich viele andere Dinge, die in bestimmten, veränderlichen Intervallen (in Spielzeit, nicht in Echtzeit) passieren müssen.
Zum Beispiel alle 24 Stunden Spielzeit (~ 47 Minuten Echtzeit, je nach Server Uhr Multiplikator) eine Reihe von verschiedenen einmal täglichen Spiel Aktionen passieren, wie Nachschub, oder was hast du.
Jetzt ist das aktuelle System ziemlich grob, aber funktioniert - ich habe eine Tabelle in der Datenbank, die im Wesentlichen ein Cron ist - ein String-Schlüssel, die Ausführungszeit des nächsten Ereignisses und dann Stunden, Minuten, Sekunden und Tage bis das nächste danach. Der Zeit-Ticker prüft dies und sendet dann eine Nachricht mit diesem Code (dem Ereignis-String-Schlüssel) an eine Warteschlange, fügt die Tage, Minuten, Sekunden der aktuellen Zeit hinzu und legt diese als nächste Ausführungszeit fest.
Der Nachrichten-Listener ist der grody Teil - er schaltet den Schlüssel ein und trifft eine seiner Methoden.
Jetzt verstehe ich, dass dies gut funktionieren kann, aber es ist wirklich nicht gut mit mir sitzen. Was wäre Ihre Lösung dafür, jedes Stück Code in seiner eigenen kleinen Klasse zu haben? Welches Designmuster deckt das ab? (Ich bin mir sicher, dass es einen gibt). Ich habe ein paar Ideen, aber ich würde gerne einige Meinungen hören.
Ich habe dies nicht als Antwort markiert, weil es die beste Antwort ist - sicher, Mapping ist besser als ein Schalter, aber es ist wirklich nicht elegant. Der ServiceLoader wäre der bessere Ansatz, aber keine der anderen bereits vorhandenen Infrastrukturen wie Spring. –