1

在我的应用程序中,我为 UI 组件及其事件管理提供了不同的类。

虽然我最初的想法是为 Window 和 Frames 设置单独的类,然后一个 Window 将具有 Frames 的组合。

并且应该有一个条目用于创建和委派在窗口或框架/控制级别发生的事件。

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

因此,目前以单独的事件处理程序结束,这些事件处理程序直接链接到它们各自的 UI 框架/控件。

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

4

2 回答 2

0

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

您可以在此处查看我关于同一主题的另一个(更详细)答案。

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

于 2013-02-17T14:01:32.850 回答
0

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

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

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

  abstract execute();
}

基本上现在您可以使用api为单个UI组件设置命令。setCommandUI 组件将只委托给底层命令。

class Button {

private Command command; 

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

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

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

于 2013-02-17T16:05:01.747 回答