2012-12-23 65 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); 
相關問題