2009-04-27 3 views
8

Ich fand heraus, dass ich versuchte, einen Link zu einer offiziellen Definition dieses Entwurfsmusters zu finden, von der ich glaube, dass ich sie in Go4 gesehen habe, sie aber nirgends zu finden scheint.Wie wird dieses Muster bezeichnet (vermeidet das Typcasting)?

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

Antwort

13

Es ist die Visitor Pattern. Die Technik wird "Doppelversand" genannt.

+0

Ich mochte die erste Version Ihrer Antwort besser. Dies ist ein Doppelversand. Das Visitor-Muster fügt den Begriff _multiple_ Visitors hinzu (in meinem Beispiel "Processor" genannt). – zvolkov

+0

Ich wechselte die Betonung, da der Titel nach dem "Muster" fragt, und die Frage bezieht sich auf GoF. – erickson