2012-12-23 66 views
4

我被困在为我的问题提出一个干净的设计(下)。我已经设想了一个pub/sub或observer模式,但是我的问题似乎与这些方法相反,除非我只是想法不正确。也许Mediator模式会起作用,但由于某种原因,它对我来说仍然不太合适。所以,在这里需要什么设计的任何帮助,请让我知道:)如何通过一个处理程序处理多个事件源

我的问题是,我需要一个处理程序,可以处理来自多个来源的事件。我需要一个可以管理多个地方事件的热键管理器。 IE浏览器。如果遇到按键,则会发生一些操作。或者,如果在麦克风上按下某个按钮(不同的来源),则应该发生一个动作。

我目前的想法是实现经理作为一个单身人士(不是一个巨大的粉丝......),并有经理注册的课程。这些类将需要实现一个接口来保证管理员将会附加的某个事件(当他们被注册时)。我只是不喜欢这一点,因为类将需要提高这种情况下,这是不是由合同本身

回答

3

您当前的主意听起来不错保证,但我会做如下调整:

  • 没有必要让经理成为一个单身人士;

  • 事件源不需要向热键管理器注册自己,其他一些类(构建器)可以负责向管理器注册它们,这样可以消除管理器上源的依赖关系。

例如,

public class HotKeyManager 
{ 
    public void RegisterKeySource(IKeySource source) 
    { 
     source.OnKeyPress += this.KeyPressHandler; 
    } 

    public void KeyPressHandler(object sender, KeyPressEventArgs args) 
    { 
     // ... 
    } 

    // ... 
} 

public interface IKeySource 
{ 
    event EventHandler<KeyPressEventArgs> OnKeyPress; 

    // ... 
} 

其他一些类处理源注册:

var hotKeyManager = new HotKeyManager(); 

var keySource = new MyKeySource(); // Implements IKeySource 

hotKeyManager.RegisterKeySource(keySource); 
相关问题