2010-03-17 6 views
7

"dispatcher"패턴이란 무엇이며 어떻게 코드에서 구현할 수 있습니까?"Dispatcher"디자인 패턴이란 무엇입니까?

나는 일반 객체의 속성 모음을 가지고 있으며 검색을 일반적인 방법으로 위임하려고합니다.

현재 가방에있는 특정 키를 찾는 속성이 있습니다. 예를 들어 :

private Dictionary<String, Object> Foo { get; set; } 
private const String WidgetKey = "WIDGETKEY"; 

public Widget? WidgetItem 
{ 
    get 
    { 
     return Foo.ContainsKey(WidgetKey) ? Foo[WidgetKey] as Widget: null; 
    } 
    set 
    { 
     if (Foo.ContainsKey(WidgetKey)) 
      Foo[WidgetKey] = value; 
     else 
      Foo.Add(WidgetKey, value); 
    } 
} 

그것은이가 "디스패처"패턴보다 일반적인 될 수 있다고 제안했지만, 나는 좋은 설명이나 예를 찾을 수있었습니다.

나는 속성 가방 저장/검색을 처리하는보다 일반적인 방법을 찾고 있습니다.

답변

8
내가 제대로 질문을 이해 확실하지 않다

,하지만 ...

나는 일반 객체의 속성 모음을 가지고 있으며 일반적인 방법에 위임 검색을하고 싶습니다.

... "이중 발송"에 대한 정보를 찾고 계십니까? B 형의 객체와 C 뭔가를 할

abstract class A {} 
class B extends A {} 
class C extends A {} 

그리고 두 가지 방법 :

세 수업을 상상해

void DoSomething(B obj) {} 
void DoSomething(C obj) {} 

문제는 당신이 가진 모든이의 변수 인 경우 정적 유형 A ... :

A a = new B(); 

... 컴파일 타임에만 DoSomething (a)을 호출 할 수 없습니다. 그것의 정적 타입 (A)이 알려져 있기 때문에, 컴파일러는 DoSomething (B obj) 또는 DoSomething (C obj) 메소드를 호출해야 하는지를 결정할 수 없다.

여기는 이중 디스패치 기능이 제공됩니다. 일부 언어는 기본적으로 지원하며 C++, C# 및 Java와 같은 다른 언어는 지원하지 않습니다. 하지만이 언어로 직접 구현할 수도 있습니다. 예를 들어 참조 :

http://en.wikipedia.org/wiki/Double_dispatch

과 : C#으로

http://en.wikipedia.org/wiki/Visitor_pattern

+1

제 위키 문서 상태는 '여러 디스패치가 방문자 패턴을 사용하지 않고 달성 될 수있다. 이것은 단순히 전달되는 객체를 동적 인 ' –

관련 문제