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