如何通过一个处理程序处理多个事件源

时间:2012-12-23 04:47:06

标签: c# .net events design-patterns

我坚持为我的问题提出一个干净的设计(下图)。我已经考虑过发布/发布或观察者模式,但我的问题似乎与这些方法相反,除非我没有正确思考。也许Mediator模式会起作用,但由于某些原因它仍然不适合我。所以,在这里需要什么设计的任何帮助,请告诉我:))

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

我目前的想法是将经理实现为单身人士(不是这个人的忠实粉丝......),并在经理中注册课程。这些类需要实现一个接口,该接口将保证管理器将附加到的某个事件(当它们被注册时)。我只是不喜欢这个,因为班级需要提出这个事件,这不是合同本身所保证的事情

1 个答案:

答案 0 :(得分:3)

您当前的想法听起来不错,但我会进行以下调整:

  • 经理不需要单身;

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

E.g。

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);