确定事件类型的不同方法 - 使用什么样的设计模式?

时间:2017-03-16 09:53:21

标签: java design-patterns wrapper

在我的应用程序中,有两种方式可以接收事件 - 来自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,我可以用它来包装EventWrapperString event

1 个答案:

答案 0 :(得分:0)

在我看来,有Strategy模式的地方。您有两种接收事件的方式,因此应该有两种策略来处理事件。