问题描述
public interface Event {
void execute(SomeClient client);
}
我有 5 个类实现了这个接口,例如:
public class FirstEvent implements Event {
@Override
public void execute(SomeClient client) {
//do varIoUs things here
client.registerEvent(someData)
}
我想要实现的是在应用程序启动期间运行 execute(SomeClient client)
接口的所有 5 个实现的 Event
方法。
我已经有了启动我需要的所有事件的代码,但我想将这些事件分成多个类,并有一个单点执行这些事件。我想创建一个 Event
接口,并制作多个带有 Micronauts @Singleton
注释的实现,这样我就可以简单地将它们全部注册,而不必将它们一一添加到当前正在执行它们的类中一个。
这个接口解决方案是一个好的决定吗?有没有更好的方法来做到这一点?实现我想要的最佳方法是什么(使用单个方法运行所有类而不是一个一个地运行它们)?
解决方法
这个界面解决方案是一个好的决定吗?
是的。
有没有更好的方法来做到这一点?
一般来说,没有。
实现我想要的最佳方式是什么(运行所有课程 用一个方法而不是一个一个地运行它们)?
没有客观上“最佳”的方法,因为您可以使用不同的技术针对不同的目标进行优化。一种选择是您可以将所有 Event
bean 注入到将对所有这些 bean 调用 execute
方法的东西中。
@Singleton
public class SomeBean {
private List<Event> events;
public SomeBean(List<Event> events) {
this.events = events;
}
// In this class you have all of the `Event`.
// it is not clear from the question where the
// SomeClient instance comes from,but once
// you have that you could iterate over all
// of the events and pass the client to the
// execute method on each Event.
}