模块化UI和事件管理的模式

时间:2013-02-16 18:58:00

标签: design-patterns

在我的应用程序中,我有不同的UI组件类和事件管理类。

虽然我最初的想法是为窗口和框架设置单独的类,然后窗口将具有框架的组合。

并且应该有一个条目用于创建和委派在Window或Frame / Control级别发生的事件。

但是,我无法得出这种模式的结论。

因此,目前最终会有单独的事件处理程序,它们直接链接到各自的UI框架/控件。

请指导我为此用例选择一个好的模式。

2 个答案:

答案 0 :(得分:0)

EventAggregator模式应该是你的方式。它完全将模块彼此分离。通过这种方式,模块不需要知道(或参考)另一个模块。

您可以看到关于同一主题here的另一个(更详细的)答案。

如果你不需要那么松散的耦合(例如模块之间有相互引用),你应该看一下Observer pattern。这是实现分布式事件处理机制的另一种方法。

答案 1 :(得分:0)

您正在寻找的是Command模式。命令模式基本上允许您将请求/消息封装到完整的成熟对象中,以便请求消息的对象不必知道最终将处理请求的对象。例如,你有菜单项,按钮等可以发出事件,基本上当你编码这些元素时,你不知道谁将处理这些事件(我假设你正在开发一个处理事件的UI框架)。因此,您基本上在名为Command的类中编码有关事件接收者的信息,并且它将引用实际的接收者。它还有一个execute方法,它基本上会调用特定于域的代码。您将拥有Command类的各个子类,它们将处理CopyCommandPasteCommand等特定请求。

abstract class Command {
  private Receiver receiver;
  public void setReceiver(Rceceiver receiver){
     this.receiver = receiver;
  }

  public Rceiver getReceiver(){
     return this.receiver;
   }

  abstract execute();
}

现在,您可以使用UI api设置包含单个setCommand组件的命令。 UI组件将委托给基础命令。

class Button {

private Command command; 

public void setCommand(Command command){
 this.command = command;
} 

 public void onClick(){
    command.execute();
  }
}

有关详细信息,请查看Gof Book中的命令模式。