在我的应用程序中,有两种方式可以接收事件 - 来自BackgroundEventListener
类处理的后台或者作为{{1}处理的文件中的一行读入}类。我们假设它们都实现了以下接口:
FromFileEventListener
public interface EventListener<E> {
void mousePressed(E mouseEvent);
void mouseReleased(E mouseEvent);
void mouseClicked(E mouseEvent);
}
类:
BackgroundEventListener
我们可以看到public class BackgroundEventListener implements EventListener<MouseEvent> {
EventHandler<MouseEvent> eventHandler;
public BackgroundEventListener() {
eventHandler = new BackgroundEventHandler();
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
eventHandler.handleEvent(mouseEvent, "mousePressed");
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
eventHandler.handleEvent(mouseEvent, "mouseReleased");
}
@Override
public void mouseClicked(MouseEvent mouseEvent) {
eventHandler.handleEvent(mouseEvent, "mouseClicked");
}
}
类直接传递事件类型,具体取决于调用哪个方法。
BackgroundEventListener
接口和实现:
EventHandler
背景:
public interface EventHandler<E> {
void handleEvent(E event, String type);
}
来自档案:
public class BackgroundEventHandler implements EventHandler<MouseEvent> {
@Override
public void handleEvent(MouseEvent event, String type) {
// TODO handle event coming from background
}
}
这是我的问题。在后台的情况下,必须明确地将事件类型作为额外参数传递。但是,当从文件中读取事件时,事件本身中存在有关事件类型的信息。因此,public class FromFileEventHandler implements EventHandler<String> {
@Override
public void handleEvent(String event, String type) {
// TODO handle event coming from background
}
}
类需要看起来像这样:
FromFileEventListener
这会导致事件作为第一个参数传入,第二个参数是需要事先提取的类型,例如使用类public class FromFileEventListener implements EventListener<String> {
EventHandler<String> eventHandler;
public FromFileEventListener() {
eventHandler = new FromFileEventHandler();
}
@Override
public void mousePressed(String event) {
eventHandler.handleEvent(event, Utils.getTypeOutOfEvent(event));
}
@Override
public void mouseReleased(String event) {
eventHandler.handleEvent(event, Utils.getTypeOutOfEvent(event));
}
@Override
public void mouseClicked(String event) {
eventHandler.handleEvent(event, Utils.getTypeOutOfEvent(event));
}
}
的公共静态方法getTypeOutOfEvent(String event)
- 显然不必要的重复数据和不同类之间的分裂事件处理。
这个问题的优雅解决方案是什么?我应该使用什么设计模式? (我想到的一种方法是创建一个Utils
,我可以用它来包装EventWrapper
或String event
对