2009-04-27 76 views
8

發現自己試圖找到一個鏈接到這種設計模式的官方定義,我相信我在Go4中看到,但似乎無法在任何地方找到它。這個模式叫什麼(有助於避免類型轉換)?

class Processor{ 
    ProcessParameter(AbstractParameter x){ 
     x.Process(this); 
    } 

    ProcessParameter(ParameterA x){ 
     ... A-specific logic... 
    } 

    ProcessParameter(ParameterB x){ 
     ... B-specific logic... 
    } 
} 

abstract class AbstractParameter{ 
    abstract void Process(Processor p); 
} 

class ParameterA : AbstractParameter{ 
    override void Process(Processor p){ 
     p.ProcessParameter(this); 
    } 
} 

class ParameterB : AbstractParameter{ 
    override void Process(Processor p){ 
     p.ProcessParameter(this); 
    } 
} 

回答

13

這是Visitor Pattern。這項技術被稱爲「雙重調度」。

+0

我更喜歡你的答案的第一個版本。這是_is_ Double Dispatch。訪問者模式增加了_multiple_ Visitors的概念(在我的例子中稱爲「處理器」)。 – zvolkov 2009-04-27 18:14:52