gpt4 book ai didi

java - 需要一种优雅的方式在指定的时间间隔内调用任意代码

转载 作者:行者123 更新时间:2023-12-04 07:08:45 24 4
gpt4 key购买 nike

好的,我有一个运行在 Java/Hibernate/Spring/Quartz 中的游戏服务器。游戏时钟与 Quartz 计时器一起滴答作响,效果很好。

然而,我还有许多其他事情需要在特定的、可调整的时间间隔内发生(在游戏时间,而不是实时)。

例如,每 24 小时游戏时间(约 47 分钟实时,取决于服务器时钟倍数)就会发生一堆不同的一天一次的游戏 Action ,比如补给,或者你有什么。

现在,当前系统非常粗糙,但是可以工作 - 我在数据库中有一个表,它本质上是一个 cron - 一个字符串键,下一个事件的执行时间,然后是小时、分钟、秒和天,直到下一个事件.时间记录器会检查这一点,然后将包含该代码(事件字符串键)的消息发送到队列中,将天、分钟、秒添加到当前时间并将其设置为下一个执行时间。

消息监听器是最重要的部分——它打开按键并点击它的一种方法。

现在我明白这可以很好地工作,但它真的不适合我。你的解决方案是什么,让每段代码都放在自己的小类中?什么设计模式涵盖了这个? (我确定有一个)。我有一些想法,但我想听听一些意见。

最佳答案

您可以将代码用作映射中的键,而不是打开一组代码,其中值是实现处理程序接口(interface)的对象。这使您可以更加灵活地添加新的事件类型。

该模式看起来像这样:

private final Map<String, Handler> handlers = new TreeMap<String, Handler>();

public void register(String event, Handler handler) {
handlers.put(event, handler);
}

public void handle(String event) {
Handler handler = handler.get(event);
if (handler == null) {
/* Log or throw an exception for unknown event type. */
}
else {
handler.execute();
}
}

您可以使用 Java 6 的 ServiceLoader 之类的东西,而不是显式注册处理程序。只需将 JAR 放入类路径即可添加新行为。

关于java - 需要一种优雅的方式在指定的时间间隔内调用任意代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/698352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com