簡體   English   中英

什么是“Dispatcher”設計模式?

[英]What is the “Dispatcher” design pattern?

什么是“調度程序”模式以及如何在代碼中實現它?

我有一個通用對象的屬性包,並希望將檢索委托給泛型方法。

目前,我有物業在包中尋找特定的鑰匙。 例如:

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

有人建議,這可能是“調度員”模式的更通用,但我一直無法找到一個好的描述或例子。

我正在尋找一種更通用的方式來處理屬性包存儲/檢索。

我不確定我是否理解你的問題,但......

我有一個通用對象的屬性包,並希望將檢索委托給泛型方法。

...聽起來你正在尋找有關“雙重調度”的信息?

想象一下,你有三個班:

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

還有兩種方法可以處理B類和C類對象:

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

和:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM