我坚持为我的问题提出一个干净的设计(下图)。我已经考虑过发布/发布或观察者模式,但我的问题似乎与这些方法相反,除非我没有正确思考。也许Mediator模式会起作用,但由于某些原因它仍然不适合我。所以,在这里需要什么设计的任何帮助,请告诉我:))
我的问题是我需要一个可以处理来自多个来源的事件的处理程序。我需要一个可以管理来自多个地方的活动的热键管理器。 IE浏览器。如果遇到按键,则应该执行某些操作。或者,如果在麦克风(不同的源)上按下按钮,则应该执行操作。
我目前的想法是将经理实现为单身人士(不是这个人的忠实粉丝......),并在经理中注册课程。这些类需要实现一个接口,该接口将保证管理器将附加到的某个事件(当它们被注册时)。我只是不喜欢这个,因为班级需要提出这个事件,这不是合同本身所保证的事情
答案 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);