2009-04-27 13 views
8

Próbowałem znaleźć link do oficjalnej definicji tego wzoru, który, jak sądzę, widziałem w Go4, ale nie mogę go nigdzie znaleźć.Jak nazywa się ten wzorzec (pomaga uniknąć rzutowania typu)?

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

Odpowiedz

13

Jest to Visitor Pattern. Technika ta nazywa się "podwójną wysyłką".

+0

Podobała mi się pierwsza wersja Twojej odpowiedzi. To jest podwójna przesyłka. Wzorzec Odwiedzający dodaje pojęcie _multiple_ Visitors (w moim przykładzie "Procesor"). – zvolkov

+0

Zmieniłem nacisk, ponieważ tytuł pyta o "wzór", a pytanie odnosi się do GoF. – erickson

Powiązane problemy