2009-04-27 12 views
8

Mi sono trovato a cercare un collegamento a una definizione ufficiale di questo modello di progettazione che credo di aver visto in Go4 ma che non riesco a trovare da nessuna parte.Come si chiama questo modello (aiuta a evitare il casting di caratteri)?

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

risposta

13

È il Visitor Pattern. La tecnica è chiamata "doppia spedizione".

+0

Mi è piaciuta la prima versione della risposta. Questo _is_ Double Dispatch. Il pattern Visitor aggiunge la nozione di _multiple_ Visitors (chiamata "Processore" nel mio esempio). – zvolkov

+0

Ho cambiato l'enfasi poiché il titolo richiede il "pattern" e la domanda si riferisce a GoF. – erickson

Problemi correlati