2012-12-23 1 views
4

내 문제 (아래)에 대해 깔끔한 디자인을 고수하려고합니다. 내가 술집/하위 또는 관찰자 패턴을 심사 숙고했지만, 내 문제는 내가 올바르게 생각하지 않는 한이 접근법의 반대 인 것처럼 보입니다. 어쩌면 중재자 패턴이 효과가 있을지 모르지만, 여전히 어떤 이유로 든 나에게 맞는 것처럼 보일 수는 없습니다. 그래서, 여기에 어떤 디자인의 도움이 필요합니까, 내게 알려주십시오 :)하나의 핸들러를 통해 여러 이벤트 소스를 처리하는 방법

제 문제는 여러 소스의 이벤트를 처리 할 수있는 핸들러가 필요하다는 것입니다. 여러 곳에서 이벤트를 관리 할 수있는 단축키 관리자가 필요합니다. IE. 키 누르기가 발생하면 어떤 동작이 발생해야합니다. 또는 마이크 (다른 소스)에서 버튼을 누르면 동작이 수행되어야합니다.

현재 나의 생각은 매니저를 싱글 톤으로 구현하는 것입니다. (이것에 대한 큰 팬이 아니라 ...) 매니저에 클래스가 등록되어 있습니다. 클래스는 관리자가 등록 할 특정 이벤트 (등록시)를 보장하는 인터페이스를 구현해야합니다. 클래스 자체

답변

3

현재 아이디어는 좋은 소리 계약에 의해 보장되는 것이 아닙니다되는이 이벤트를 발생해야하기 때문에 난 그냥이 마음에 들지 않지만, 나는 다음과 같은 개조하면 되겠 어 만들 것 :

  • 관리자가 싱글 톤이 될 필요가 없습니다.

  • 이벤트 소스는 단축키 관리자로 등록 할 필요가 없으며 다른 클래스 (빌더)가 관리자와 등록해야 할 수 있습니다. 그러면 관리자의 소스에서 종속성이 제거됩니다.

예.

var hotKeyManager = new HotKeyManager(); 

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

hotKeyManager.RegisterKeySource(keySource); 
:

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; 

    // ... 
} 

몇 가지 다른 클래스는 소스 등록을 처리

관련 문제